You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何正确组合OR与AND运算符实现目录操作逻辑?

你的Bash命令逻辑分析与修正方案
  • 你的写法不正确,核心问题是mkdir确实会无论ls是否成功都执行,原因如下:
    Bash中&&和||的优先级相同,执行顺序为左结合,你的命令等价于:

    (ls "$MY_DIR" || echo "Creating $MY_DIR") && mkdir -p "$MY_DIR"
    

    当$MY_DIR存在时,ls返回0,||后的echo不执行,整个括号内的表达式返回0,触发&&后的mkdir执行——这违背了你“目录存在时只输出内容”的需求;当目录不存在时,ls失败,执行echo(返回0),括号内表达式返回0,mkdir执行,这部分符合预期,但整体逻辑存在漏洞。

  • 正确的写法有两种:

    1. 用if语句(更规范易读):
      这是Shell脚本中推荐的写法,逻辑清晰,不易出错:
    if [ -d "$MY_DIR" ]; then
        ls "$MY_DIR"
    else
        echo "Creating $MY_DIR"
        mkdir -p "$MY_DIR"
    fi
    

    这里用-d直接判断目录是否存在,比ls更可靠——如果目录存在但你没有读权限,ls会返回失败,但目录实际存在,用-d能避免这种误判。

    1. 调整逻辑运算符的结合方式:
      若坚持用||和&&组合,需把echo和mkdir用括号包裹,让它们作为||的右侧整体:
    ls "$MY_DIR" || (echo "Creating $MY_DIR" && mkdir -p "$MY_DIR")
    

    这样当ls成功时,||右侧的括号内容完全不执行;当ls失败时,才会依次执行echo和mkdir。

内容的提问来源于stack exchange,提问作者Anil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:50:23