"对于"如果没有这样的文件,则将循环通配符计算为变量

时间:2015-06-25 15:25:10

标签: bash for-loop wildcard

$ for f in /etc/shell*; do echo $f; done
/etc/shells
$

好!

$ for f in /etc/no_such*; do echo $f; done
/etc/no_such*
$

BAD!

如果没有文件存在,我怎样才能获得通配符评估?

1 个答案:

答案 0 :(得分:6)

有一个特定的shell选项可以使用globs启用此行为,称为nullglob。要启用它,请使用shopt -s nullglob

启用此选项后,没有匹配的模式将评估为空,而不是评估为自身。

这是bash提供的非标准功能,因此如果您正在使用其他shell或正在寻找更广泛的兼容选项,则可以向循环体添加条件:

for f in /etc/no_such*; do [ -e "$f" ] && echo "$f"; done

只有在文件存在时才会回显。