Bash脚本中[[ $# -gt 0 ]]报command not found问题排查
Bash脚本
[[ 1: command not found错误解析 核心原因:特殊空白字符
你遇到的问题大概率是while循环行里混入了非标准空白字符(比如全角空格、不间断空格U+00A0)。Bash对语法字符的要求极严格,[[和后续条件之间必须是标准半角空格,一旦换成其他空白字符,Bash会把[[ 1(带特殊空格)当成一个完整命令,自然找不到该命令,从而抛出[[ 1: command not found错误。复制正常脚本的while行能解决问题,本质就是用标准半角空格替换了特殊空白字符。
用set -x排查特殊字符
set -x可以精准定位问题:
- 在脚本开头添加
set -x,执行脚本时会打印Bash实际解析的命令行内容。 - 如果存在特殊空白字符,
set -x的输出会显示对应的转义序列,比如不间断空格会显示为$'\xc2\xa0',全角空格会显示为$'\xe2\x80\x8b'这类转义码,一眼就能识别异常位置。
其他可能的原因
- 语法拼写失误:比如把
[[写成[ [(多了空格),或者漏写闭合的]],不过这类情况的报错信息通常和你遇到的不同,结合“复制正常行解决问题”的情况,这个概率极低。 - 脚本编码异常:如果脚本采用非UTF-8编码(比如GBK),部分字符可能被解析为乱码,进而触发语法错误。可以用
file script.sh命令查看脚本编码,确保是UTF-8格式。 - 极端Bash版本兼容问题:极少数非常老旧的Bash版本对
[[语法的支持存在差异,但你其他同结构脚本运行正常,说明环境不存在版本兼容问题,可直接排除。
内容的提问来源于stack exchange,提问作者Yama
相关产品推荐
相关产品推荐

