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

提取Bash脚本单个参数时遇[run: command not found错误求助

问题排查与解决

这问题我太熟了!你碰到的[run: command not found错误,完全是bash里test命令(也就是方括号[)的语法细节没注意到导致的,咱们一步步理清楚:

错误根源

bash里的[是一个内置命令(和test是同一个东西),它的语法要求非常严格:

  • [后面必须跟一个空格,不能直接和变量/字符串连在一起
  • 结尾的]前面也必须跟一个空格,它是[命令的结束标记,得单独作为参数

你写的[$1 == 'run'],bash会把[$1当成一个完整的命令名——当你传入run作为参数时,就变成了[run,系统自然找不到这个命令,所以才会报[run: command not found。

修正后的代码

把语法细节调整好,再补充一些健壮性处理,最终代码应该是这样的:

function main () {
    if [ "$1" == 'run' ]; then
        echo "turning intercept proxies on";
        # enableInterceptProxies;
        echo "intercept proxies turned on";
    elif [ "$1" == 'term' ]; then
        echo "turning intercept proxies off";
        # disabbleInterceptProxies;
        echo "intercept proxies turned off";
    else
        echo "Invalid argument! Usage: ./intercept.sh run|term"
    fi
}

# 别忘了调用main函数,把脚本接收的参数传进去
main "$@"

额外优化点

  • 给$1套上双引号:如果用户没传任何参数,$1为空,不加引号会导致[ == 'run' ]这种非法语法,加双引号能避免这种情况。
  • 增加else分支:处理用户传错参数的情况,友好提示正确用法。
  • 也可以用[[ ]](bash的扩展test语法),它的语法更宽松,不需要严格的空格(不过还是建议保持良好习惯),比如[[ $1 == 'run' ]]也能正常工作,但[是POSIX标准的,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:25:16