为什么我在BASH工作中没有比较?

时间:2014-10-20 02:00:36

标签: bash

我正在尝试比较BASH中的一些字符

read a
if (($a == "Y"))
then
    echo "YES"
elif (($a == "y"))
then
    echo "YES"
else
    echo "NO"
fi

但由于某种原因,它无法按预期工作。它总是输出YES。看着这个超级简单的脚本,我无法理解什么是错误的。

3 个答案:

答案 0 :(得分:6)

这是由于间距和括号。

read a
if [[ $a == "Y" ]]
then
   echo "YES"
elif [[ $a == "y" ]]
then
   echo "YES"
else
   echo "NO"
fi

答案 1 :(得分:1)

您应该查看bash comparison。您尝试使用算术扩展构造进行字符串比较。相反,您应该使用[ exp ][[ exp ]]构造。

答案 2 :(得分:0)

((表达式))用于'算术评估',(())内的字符串将被视为变量名,因此

if(($ a ==“Y”))

相当于

如果[$ a == $ Y]

(如果$ Y是一个字符串,那么bash将尝试扩展名称,直到找到数值或未定义的变量)

您需要使用[]或[[]]来比较字符串,如@KRUKUSA所说。