这段代码会产生一个错误第 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 语句好得多。