不匹配任何东西的 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

来自Greg's Wiki - 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