Globstar:新的 Bash Globbing 选项
发布于 2010 年 5 月 11 日
在 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 会递归所有目录。请注意,这将递归所有目录级别,而不仅仅是一个级别。
您可以通过发出以下命令来查看是否已设置 globstar:shopt不带任何参数的命令
$ shopt
...
force_fignore on
globstar on
gnu_errfmt off
...
或者,如果要在脚本中测试它,可以使用-q选项shopt并测试退出状态,例如:
if shopt -q globstar; then
...
if