【问题标题】:bash script: wildcard expression is not processed as expected [duplicate]bash脚本:通配符表达式未按预期处理[重复]
【发布时间】:2014-07-02 23:51:05
【问题描述】:

在 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

但是当目录为空时,它会将~/logs/*.log 视为唯一要迭代的项目,所以我得到了这个

processing /home/foo/logs/*.log 

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

【问题讨论】:

    标签: bash for-loop wildcard


    【解决方案1】:

    两种方式:

    也可以设置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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2022-07-20
      相关资源
      最近更新 更多