是的,正如@larsks提到的,你需要方括号。试试这个完整版本:
我刚开始使用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
#!/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