$ 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!
如果没有文件存在,我怎样才能获得通配符评估?
答案 0 :(得分:6)
有一个特定的shell选项可以使用globs启用此行为,称为nullglob
。要启用它,请使用shopt -s nullglob
。
启用此选项后,没有匹配的模式将评估为空,而不是评估为自身。
这是bash提供的非标准功能,因此如果您正在使用其他shell或正在寻找更广泛的兼容选项,则可以向循环体添加条件:
for f in /etc/no_such*; do [ -e "$f" ] && echo "$f"; done
只有在文件存在时才会回显。