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

时间:2014-05-14 18:55:41

标签: 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视为唯一要迭代的项目,所以我得到了这个

processing /home/foo/logs/*.log 

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

1 个答案:

答案 0 :(得分:4)

两种方式:

您可以设置nullglob shell选项:

shopt -s nullglob
for f in ~/logs/*.log
do
    echo "processing $f"
done

test是否存在文件:

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