当没有匹配时如何处理 bash * 匹配?

当没有匹配时如何处理 bash * 匹配?

*.txt当目录中实际有文件时,以下 bash 代码片段效果很好。

for txt in *.txt
do                                               
  echo "loading data from $txt"
done   

当没有时,文字*.txt将作为 $txt 进入循环(不好)。

我如何更改此代码以便在没有*.txt文件时do ... done跳过该块?

答案1

在语句前加上这个神奇的咒语for

shopt -s nullglob

文档

答案2

如果您使用的是 bash(不是 brand-X shell),并且不必担心 nullglob 会更改/破坏其他任何内容,则最好使用 nullglob 选项(@kfmfe04 的答案)。否则,您可以使用这个(稍微混乱一点的)选项:

for txt in *.txt
do
  [ -e "$txt" ] || continue
  echo "loading data from $txt"
done

这会默默跳过不存在的文件(如果没有匹配项,主要是“*.txt”,但也可能是在生成for列表和循环到达它们之间删除的文件...)

相关内容