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

Shell脚本使用AND逻辑检测多个命令是否存在时报错如何解决?

Shell多命令检测脚本错误原因说明

你编写的多命令检测代码存在两类问题:

  • 语法错误:[ 是Shell内置命令而非语法标记,它和后续参数、结尾的]必须用空格分隔。你写的[$(test ...)]没有加空格,Shell会将其识别为一个不存在的命令,直接抛出找不到命令的报错。
  • 逻辑冗余错误:test和[是功能完全等价的命令([仅要求最后一个参数必须是]),你把test的执行结果嵌套到[中判断完全没有必要,反而会因为test执行成功无输出,导致[ ]判断空值出现逻辑异常。

你之前单命令的写法能正常运行,是因为你直接使用了test命令做判断,没有加多余的[ ]也没有语法空格问题。

正确写法参考

方案1(最简洁高效):直接利用command -v的退出状态判断,不需要捕获命令输出

# >/dev/null 2>&1 作用是丢弃命令的正常输出和错误输出,避免终端打印多余内容
if command -v brew >/dev/null 2>&1 && command -v python >/dev/null 2>&1; then
  echo -e "This will work"
fi

方案2:保留[ ]写法,直接判断command -v输出是否非空

# -n 参数用于判断字符串长度是否不为0
if [ -n "$(command -v brew)" ] && [ -n "$(command -v python)" ]; then
  echo -e "This will work"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:09:01