bash 脚本中的 OR 运算符

bash 脚本中的 OR 运算符

这段代码会产生一个错误第 3 行:[:缺少 `]'。那么为什么我会收到这样的错误呢?

#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y"]
then
   echo "YES"
else
   echo "NO"
fi

提前致谢。

答案1

您需要在“和]之间添加一个空格

$ ./test.sh
Y
YES

$ cat test.sh
#!/bin/bash 
read x
if [ $x == "Y" ] || [ $x == "y" ] 
then
    echo "YES"
else
    echo "NO"
fi

干杯。

答案2

左括号[实际上是一个命令(尽管它也可以作为 shell 内置命令使用,但这是一个不同的故事)。

$ which [
/usr/bin/[

shell 使用给定的选项运行此命令。在您的情况下,将有一个调用包含四个选项$x==Y],另一次调用包含三个选项$x==、 和y]。这是因为 shell 使用空格将选项与命令以及其他命令分隔开。引号 (") 不会被传递,而是由 shell 使用来“转义”某些字符的特殊含义(例如,当您需要将空格传递给命令时)。

此时,shell 已使用方括号(以及中间的所有内容)完成,并且由命令来[执行一些有用的操作。[被编程为期望]作为其最后一个参数(出于明显的原因;请注意,当调用 as 时,不需要test同一命令的另一个名称)。]由于缺少空白,]找不到,并[抱怨。

答案3

您必须使用双大括号并用“”将变量括起来:

#!/bin/bash
read x;
if [[ "$x" = "Y" ||  "$x" = "y" ]];  then
   echo "YES"
else
   echo "NO"
fi;

不过我更喜欢使用:

echo $x |tr '[A-Z]' '[a-z]'

它比 if 语句好得多。

相关内容