没有匹配文件的Bash for循环会出错

时间:2014-11-28 14:47:59

标签: regex bash

我有一个for循环用于处理与模式匹配的目录中的文件:

for file in ${dir}/FileName_${TIMESTAMP}-*; do

如果至少有一个匹配的文件,则此方法有效,但是如果没有,则会出现错误而不是跳过循环(执行零次)。​​

  

dir / FileName_2014_11_28- *:没有这样的文件或目录

为什么会这样?如何防止这种情况?

3 个答案:

答案 0 :(得分:2)

要评估与任何内容都不匹配的glob,您需要打开nullglob

shopt -s nullglob

要小心,因为它并不总能满足你的需要。尝试ls nonexistent-prefix-*:输出与ls相同,没有参数。您可能还对failglob选项感兴趣,该选项会将不匹配的glob变为错误。

答案 1 :(得分:1)

使用带有nullglob的数组。

shopt -s nullglob
arr=(${dir}/FileName_${TIMESTAMP}-*)
for file in "${arr[@]}"; do
done

答案 2 :(得分:0)

您可以使用find来完成此操作。

for file in $(find ${dir} -iname "FileName_${TIMESTAMP}-*")
do
    echo $file
done

如果${dir}中没有文件,for循环将不报告任何错误并将其视为空列表并移至下一个代码块。