带有字符串的bash-if语句的计算结果总是为true



我刚开始使用bash,在使用if语句时遇到了问题。为什么以下脚本:

#!/bin/bash
read C
if  (( $C == 'Y' )) ; then
echo "YES"
elif (( $C == 'N' )) ; then
echo "NO"
fi

无论$C取什么值,似乎都打印YES

算术语句((...))中的字符串被递归扩展,直到您得到一个整数值(包括未定义参数的0(或导致语法错误的字符串。一些例子:

# x expands to y, and y expands to 3
$ x=y y=3
$ (( x == 3 )) && echo true
true
$ x="foo bar"
$ (( x == 3 ))
bash: ((: foo bar: syntax error in expression (error token is "bar")
# An undefined parameter expands to 0
$ unset x
$ (( x == 0 )) && echo true
true

在您的情况下,$C扩展到某个未定义的参数名称,它和Y都扩展到0,0==0。

对于字符串比较,请改用[[ ... ]]

if [[ $C == Y ]]; then
是的,正如@larsks提到的,你需要方括号。试试这个完整版本:
#!/bin/bash
read C
if [[ ${C} == 'Y' ]]; then
echo "YES"
elif [[ ${C} == 'N' ]]; then
echo "NO"
fi

这是正确的格式。

#!/bin/bash
read C
if  [[ $C == 'Y' ]]
then
echo "YES"
elif [[ $C == 'N' ]]
then
echo "NO"
fi

相关内容

  • 没有找到相关文章

最新更新