这是我的脚本(简化):
cd /etc; for f in *.{conf,cfg,foo}; do echo $f; done
它输出类似
adduser.conf
apg.conf
...
vdpau_wrapper.cfg
*.foo
(仅举例)
就目前而言,我使用类似
for f in *.{conf,cfg,foo}; do test -f $f && echo $f; done
因为*.foo
(没有与掩码匹配的文件)
*.ext
有没有更方便的解决方案(例如,如果没有找到这样的文件就不列出)?
换句话说:*.foo
当没有文件与掩码匹配时,我想避免在输出中出现行*.foo
。
答案1
您可以使用:
shopt -s nullglob
使用以下命令再次禁用它:
shopt -u nullglob
如果您正在编写一个 shell 函数,需要暂时无条件地启用或禁用 shopt 设置,然后恢复到以前的状态,您可以执行以下操作:
oldshopt=$(shopt -p)
shopt -s nullglob
<do stuff...>
eval "$oldshopt"
还有相反的选项failglob
,每当 glob 扩展失败时都会导致出现错误消息。