bash脚本:未按预期处理通配符表达式

bash脚本:未按预期处理通配符表达式,bash,for-loop,wildcard,Bash,For Loop,Wildcard,在ubuntu机器上运行的bash脚本中,我有以下简单的循环 for f in ~/logs/*.log do echo "processing $f" done 如果目录~/logs中有与模式匹配的文件,它将按预期工作,即 processing /home/foo/logs/a.log processing /home/foo/logs/foo.log processing /home/foo/logs/3.log 但是当dir为空时,它将~/logs/*.log视为唯一要迭代的项

在ubuntu机器上运行的bash脚本中,我有以下简单的循环

for f in ~/logs/*.log
do
    echo "processing $f"
done
如果目录
~/logs
中有与模式匹配的文件,它将按预期工作,即

processing /home/foo/logs/a.log
processing /home/foo/logs/foo.log
processing /home/foo/logs/3.log
但是当dir为空时,它将
~/logs/*.log
视为唯一要迭代的项,因此我得到了这个结果

processing /home/foo/logs/*.log 

我如何更改它,以便在这种情况下它生成一个空的迭代列表,从而永远不会进入循环?

两种方式:

或者,您可以设置shell选项:

shopt -s nullglob
for f in ~/logs/*.log
do
    echo "processing $f"
done
或文件的存在:

for f in ~/logs/*.log
do
    [[ -f "$f" ]] || continue
    echo "processing $f"
done

两种方式:

或者,您可以设置shell选项:

shopt -s nullglob
for f in ~/logs/*.log
do
    echo "processing $f"
done
或文件的存在:

for f in ~/logs/*.log
do
    [[ -f "$f" ]] || continue
    echo "processing $f"
done