"for" 如果不存在此类文件,则循环通配符评估为变量
"for" loop wildcard evaluated to variable if no such files present
$ for f in /etc/shell*; do echo $f; done
/etc/shells
$
好!
$ for f in /etc/no_such*; do echo $f; done
/etc/no_such*
$
不好!
如果不存在文件,我如何获得通配符评估?
有一个特定的 shell 选项可以使用 glob 启用此行为,称为 nullglob
。要启用它,请使用 shopt -s nullglob
.
启用此选项后,没有匹配项的模式不会求值,而不是求值自身。
这是 bash 提供的非标准功能,因此如果您正在使用另一个 shell 或正在寻找更广泛兼容的选项,您可以向循环体添加条件:
for f in /etc/no_such*; do [ -e "$f" ] && echo "$f"; done
仅当文件存在时才会回显。
$ for f in /etc/shell*; do echo $f; done
/etc/shells
$
好!
$ for f in /etc/no_such*; do echo $f; done
/etc/no_such*
$
不好!
如果不存在文件,我如何获得通配符评估?
有一个特定的 shell 选项可以使用 glob 启用此行为,称为 nullglob
。要启用它,请使用 shopt -s nullglob
.
启用此选项后,没有匹配项的模式不会求值,而不是求值自身。
这是 bash 提供的非标准功能,因此如果您正在使用另一个 shell 或正在寻找更广泛兼容的选项,您可以向循环体添加条件:
for f in /etc/no_such*; do [ -e "$f" ] && echo "$f"; done
仅当文件存在时才会回显。