一种方法是:
for f in abc*; do if [[ -f "$f" ]]; then
# Do something with "$f"
fi; done
Run Code Online (Sandbox Code Playgroud)
这也将从列表中过滤出目录,这可能是也可能不是您想要的。
如果您想保留目录,请-e使用-f.
另一种方法是设置 shell 选项nullglob(可能并非在所有 bash 版本上都可用)。设置后,与nullglob任何文件名不匹配的模式将不会产生任何结果,而不是保持不变。
shopt -s nullglob
for f in abc*; do
# do something with $f
done
shopt -u nullglob
Run Code Online (Sandbox Code Playgroud)
(这会nullglob在循环期间保留设置for。您可以在循环内取消设置它,而不是等待结束,而在shopt -u每个循环上执行的成本很小。)