简单的Bash - 适用于*

use*_*022 7 bash loops for-loop file

考虑这个简单的循环:

for f in *.{text,txt}; do echo $f; done
Run Code Online (Sandbox Code Playgroud)

我想只回显有效的文件名.在脚本中使用$ f变量一切都很好,除非没有该扩展名的任何文件.在空集的情况下,$ f设置为*.text和上面的行回声:

*.text
*.txt
Run Code Online (Sandbox Code Playgroud)

而不是回声.如果您尝试将$ f用于期望实际真实文件名的任何内容而不是*,则会产生错误.

如果有任何文件与通配符匹配,那么它不是一个空集,一切都按我的意愿运行.例如

123.text
456.txt
789.txt
Run Code Online (Sandbox Code Playgroud)

如何在没有错误的情况下执行此操作,并且没有看起来像星号匹配$ f的第一个字符串的过度复杂性?

Ign*_*ams 14

设置nullglob选项.

$ for f in *.foo ; do echo "$f" ; done
*.foo
$ shopt -s nullglob
$ for f in *.foo ; do echo "$f" ; done
$ 
Run Code Online (Sandbox Code Playgroud)