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