使用Bash 4.4时,加入&&与第二个字符串判断为何报错?
Bash条件判断中使用
&&报错的原因及解决办法 嘿,我来帮你捋清楚这个报错的根源哈!
你遇到的main.sh: line 5: [: missing ]'错误,核心原因是**[` 是Bash的内置命令(等同于`test`命令),它的语法规则和Shell层面的`&&`控制符不兼容**:
[命令要求所有操作数、运算符都必须作为单独的命令参数存在,而&&是Shell的逻辑与控制符,会被Shell优先解析成命令分隔符,导致[命令的参数被拆分,找不到对应的闭合],所以才会报缺少]的错误。
那怎么解决呢?给你三种靠谱的方案:
方案1:用[命令内置的-a逻辑与选项
[命令本身支持用-a来表示逻辑与,完全符合它的语法要求:
# Hello World Program in Bash Shell MY_NAME="John" NAME_1="Kate" if [ ${NAME_1} == "Kate" -a ${MY_NAME} == "John" ]; then echo "John and Kate are home from vacation" fi
方案2:使用Bash扩展的双括号[[ ]]
[[ ]]是Bash专属的扩展条件判断语法,它支持直接用&&和||,而且对变量的处理更安全(比如空格、特殊字符的兼容性更好):
# Hello World Program in Bash Shell MY_NAME="John" NAME_1="Kate" if [[ ${NAME_1} == "Kate" && ${MY_NAME} == "John" ]]; then echo "John and Kate are home from vacation" fi
方案3:拆分两个独立的[判断,用Shell的&&连接
把两个条件拆成两个单独的[命令,再用Shell的&&连接,既符合语法,可读性也不错:
# Hello World Program in Bash Shell MY_NAME="John" NAME_1="Kate" if [ ${NAME_1} == "Kate" ] && [ ${MY_NAME} == "John" ]; then echo "John and Kate are home from vacation" fi
内容的提问来源于stack exchange,提问作者Adrian J.
相关产品推荐
相关产品推荐

