Bash不理解super-easy if语句

Bash不理解super-easy if语句,bash,if-statement,Bash,If Statement,我是bash的新手,今晚刚开始做一些简单的脚本。这是来自HackerRank的一个超级简单的任务,但是我不明白为什么我的解决方案不起作用,相信我,我已经尝试了很多。输入只有一个字母,可以是“y”、“y”、“n”或“n”,输出应该是“y”和“y”的“YES”,而“n”和“n”的“NO”。我的解决方案是: read letter if (($letter == "y")) then echo "YES" elif (($letter == "Y")) then echo "YES"

我是bash的新手,今晚刚开始做一些简单的脚本。这是来自HackerRank的一个超级简单的任务,但是我不明白为什么我的解决方案不起作用,相信我,我已经尝试了很多。输入只有一个字母,可以是“y”、“y”、“n”或“n”,输出应该是“y”和“y”的“YES”,而“n”和“n”的“NO”。我的解决方案是:

read letter

if (($letter == "y"))
then
    echo "YES"
elif (($letter == "Y"))
then
    echo "YES"
else
    echo "NO"
fi
但输出始终为“是”,即使是像“G”之类的随机字母。我不知道这个奇怪的聚会是怎么回事,请有人给我解释一下

。。。是算术题。对于字符串比较,请使用[…]、[…]或test。注意括号内的空格。它们不是可选的

if [[ $letter == "y" ]]
then
    echo "YES"
elif [[ $letter == "Y" ]]
then
    echo "YES"
else
    echo "NO"
fi
你也可以用一个箱子来做这件事


你的语法不正确

你应该做:

if [ "$letter" == "y" ] # for posix compliance, use = instead of ==
   #do stuff
fi

如果你试过很多,那么你就没有试过If[[$letter==y]]。If[$letter==y]的语法不是吗?没错,我不知道括号内的空格是义务的,所以。。。谢谢你这么说!或者如果[[$letter=~^[Yy]$]];然后回应是;否则,就没有回音;Fi如果使用单括号,则应使用单等号进行字符串比较,而不是双等号,以便与sh兼容。谢谢帮助,我只是不知道括号中的空格brackets@DanielKamilKozar当有选择时,许多人更喜欢可移植语法:你永远不知道什么时候会有人试图在破折号或ash下运行你的脚本。还有,[[有一些怪癖。mjs,当使用[,你应该把$letter放在双引号中。没有它们,空的$letter会导致错误。另外,=而不是==。@John1024非常感谢。同意可移植语法。@mjs==在bash下是=的同义词,但是它是,它会失败,例如在dash下。你的答案已经有my+1。
if [ "$letter" == "y" ] # for posix compliance, use = instead of ==
   #do stuff
fi