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

zsh执行带if判断的自定义函数报= not found错误原因

问题原因

这个报错是zsh和bash的条件判断语法不兼容导致的:

  • 代码中[ "$1" == "a" ]用到的==是bash给[(即test命令)做的扩展字符串比较操作符,不属于POSIX标准语法。
  • zsh内置的[命令原生不识别==操作符,解析到该行时会把==判定为待执行的命令,找不到对应命令就抛出= not found错误,函数直接中断,因此后续的ok和end都不会输出。
解决方法

两种方案任选其一修改即可:

  • 方案1:将双等号==替换为POSIX标准规定的单等号=,该写法兼容所有符合POSIX规范的shell:
function testA() {
  echo "start"
  if [ "$1" = "a" ]; then
    echo "ok"
  fi
  echo "end"
}
  • 方案2:如果习惯双等号写法,将单中括号[ ]替换为shell原生支持的双中括号[[ ]]结构,zsh和bash都识别该结构下的==比较符,还可以省略变量外的双引号:
function testA() {
  echo "start"
  if [[ $1 == "a" ]]; then
    echo "ok"
  fi
  echo "end"
}

修改完成后执行source ~/.zshrc重新加载配置,再运行testA a就能得到预期输出:

start
ok
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:21