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

为何我的Bash脚本执行时提示‘[2: command not found’错误?

Bash脚本参数判断出错问题排查

问题重现

用户编写的Bash脚本如下:

#!/bin/sh
echo "arg 0=" $0
echo "arg 1=" $1
echo "arg 2=" $2

if [$# -eq 1]; then
  cal $1
elif [$# -eq 2]; then
  cal $1 $2
else
  echo Incorrect amount of arguments used
fi

执行命令 ./calscript.sh 5 2020 后,得到错误输出:

arg 0= calscript.sh
arg 1= 5
arg 2= 2020
calscript.sh: line 6: [2: not found
calscript.sh: line 8: [2: not found
Incorrect amount of arguments used

预期显示2020年5月的日历,但脚本执行失败。

错误原因

问题出在条件判断的语法上:[ 是一个独立的Shell命令(等价于test命令),它和后面的表达式之间必须有空格分隔。

用户写的[$# -eq 1]会被Shell解析成一个整体的命令名:当传入2个参数时,$#的值是2,这行代码会变成[2 -eq 1],Shell会尝试寻找名为[2的命令,自然找不到,因此报错。

修正后的脚本

在[后面、]前面添加空格即可解决问题:

#!/bin/sh
echo "arg 0=" $0
echo "arg 1=" $1
echo "arg 2=" $2

if [ $# -eq 1 ]; then
  cal $1
elif [ $# -eq 2 ]; then
  cal $1 $2
else
  echo Incorrect amount of arguments used
fi

执行修正后的脚本,输入./calscript.sh 5 2020就能正确显示2020年5月的日历了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:42:35