不匹配任何东西的 Glob 会扩展到自身,而不是什么都没有
Glob that doesn't match anything expands to itself, rather than to nothing
我想遍历特殊类型的文件夹中的文件(如 .test
):
所以我写了一点脚本名字for_loop
:
for f in *.test
do
echo 'This is f: '${f}
done
在 (chmod +x for_loop
) 之后我可以从 ./for_loop
开始。
如果有.test
个文件,一切都很好,但是如果文件夹中没有匹配*.test
的文件,for循环仍然执行一次。在这种情况下,输出如下所示:
This is f: *.test
但我认为如果文件夹中没有匹配glob模式的文件,就不会有输出。为什么不是这样?
这是默认行为。
要摆脱它,启用 nullglob
:
shopt -s nullglob
nullglob expands non-matching globs to zero arguments, rather than to
themselves.
...
Without nullglob, the glob would expand to a literal * in an empty
directory, resulting in an erroneous count of 1.
或者使用 zsh
,它默认启用了这个 glob!
$ for f in *.test; do echo "$f"; done
zsh: no matches found: *.test
我想遍历特殊类型的文件夹中的文件(如 .test
):
所以我写了一点脚本名字for_loop
:
for f in *.test
do
echo 'This is f: '${f}
done
在 (chmod +x for_loop
) 之后我可以从 ./for_loop
开始。
如果有.test
个文件,一切都很好,但是如果文件夹中没有匹配*.test
的文件,for循环仍然执行一次。在这种情况下,输出如下所示:
This is f: *.test
但我认为如果文件夹中没有匹配glob模式的文件,就不会有输出。为什么不是这样?
这是默认行为。
要摆脱它,启用 nullglob
:
shopt -s nullglob
nullglob expands non-matching globs to zero arguments, rather than to themselves.
...
Without nullglob, the glob would expand to a literal * in an empty directory, resulting in an erroneous count of 1.
或者使用 zsh
,它默认启用了这个 glob!
$ for f in *.test; do echo "$f"; done
zsh: no matches found: *.test