Globstar:新的 Bash Globbing 选项

作者:Mitch Frazier

在 shell 术语中,globbing 是指 shell 在命令中使用通配符(例如 * 或 ?)时所做的事情。Globbing 是匹配通配符模式,并返回匹配的文件和目录名称,然后用匹配的项目替换命令中的通配符模式。Bash 4.0 版本增加了一个新的 globbing 选项,叫做 globstar,它在设置后会以不同的方式处理模式 **。

通常,如果在命令行上使用模式 **,它的行为与 * 模式相同。例如,给定以下目录:

$ ls -l
total 8
-rw-r--r-- 1 mitch users    0 2010-05-05 10:36 a
-rw-r--r-- 1 mitch users    0 2010-05-05 10:36 b
drwxr-xr-x 2 mitch users 4096 2010-05-05 10:36 c
drwxr-xr-x 2 mitch users 4096 2010-05-05 10:36 d

如果执行以下命令:

$ for i in **
> do
>   echo $i
> done

您将获得以下输出:

a
b
c
d

如果现在使用以下命令设置 globstar 选项:

$ shopt -s globstar

然后重新运行对于上面的循环,您现在得到:

a
b
c
c/e
d
d/f

设置 globstar 后,bash 会递归所有目录。请注意,这将递归所有目录级别,而不仅仅是一个级别。

您可以通过发出以下命令来查看是否已设置 globstarshopt不带任何参数的命令

$ shopt
...
force_fignore   on
globstar        on
gnu_errfmt      off
...

或者,如果要在脚本中测试它,可以使用-q选项shopt并测试退出状态,例如:

if shopt -q globstar; then
        ...
if

Mitch Frazier 是 Emerson Electric Co. 的嵌入式系统程序员。自 2000 年代初以来,Mitch 一直是 Linux Journal 的贡献者和朋友。

加载 Disqus 评论