Bash if语句在不同位置使用感叹号生成不同的结果
我的第一个问题是为什么要放Bash if语句在不同位置使用感叹号生成不同的结果,bash,Bash,我的第一个问题是为什么要放无法生成语法错误。这就是[!$x=“string”]与 [$x!=“字符串”] 我的剧本如下 #!/bin/bash status=" " # Comparison 1: without error echo "-----Comparison 1-----" if [ ! $status = "success" ] then echo 'Error: status was not success but: ' $status else echo "The sta
当status
没有双引号时,if语句前面的code>无法生成语法错误。这就是[!$x=“string”]
与
[$x!=“字符串”]
我的剧本如下
#!/bin/bash
status=" "
# Comparison 1: without error
echo "-----Comparison 1-----"
if [ ! $status = "success" ]
then echo 'Error: status was not success but: ' $status
else
echo "The status is success."
fi
echo "-----Comparison 2-----"
# Comparison 2: with error message but still shows success
if [ $status != "success" ]
then echo 'Error: status was not success but: ' $status
else
echo "The status is success."
fi
echo "-----Comparison 3-----"
# Comparison 3: Correct result after quoting status
if [ ! "$status" == "success" ]
then echo 'Error: status was not success but: ' $status
else
echo "The status is success."
fi
echo "-----Comparison 4-----"
# Comparison 4: Correct result after quoting status
if [ "$status" != "success" ]
then echo 'Error: status was not success but: ' $status
else
echo "The status is success."
fi
输出是
-----Comparison 1-----
The status is success.
-----Comparison 2-----
./test2.sh: line 14: [: !=: unary operator expected
The status is success.
-----Comparison 3-----
Error: status was not success but:
-----Comparison 4-----
Error: status was not success but:
其他问题
- 为什么在语法错误后,它会在
比较2
中生成“状态为成功。”
?if语句中的语法错误将如何影响此类if语句的计算结果
p、 我知道我们需要“
围绕$status
来正确输出。您需要引用$status
。如果没有引号,您的第一次比较是
if [ ! = "success" ]
这将失败,因为
和success
不是相等的字符串
第二个表达式导致[
的语法无效表达式:
if [ != "success" ]
您在条件2中看到的语法错误不是shell语法错误,而是由[
命令引发的条件语法错误。该命令本身运行正常,但退出状态为非零。您需要引用$status
。如果没有引号,您的第一次比较是
if [ ! = "success" ]
它将失败,因为!
和success
不是相等的字符串
第二个表达式导致[
的语法无效表达式:
if [ != "success" ]
您在条件2中看到的语法错误不是shell语法错误,而是由[
命令引发的条件语法错误。该命令本身运行正常,但退出状态为非零。使用[[[…]]
而不是[…]
@anubhava谢谢您的建议。使用[[…]
而不是[ .. ]
@anubhava谢谢你的建议。为什么在第一个场景中,它仍然产生成功
?因为成功意味着条件不成立,!=success
确实是假的。!
在这个上下文中不是运算符;它只是=/code>运算符的左手操作数。哦,我明白了。谢谢。为什么在第一种情况,它仍然会产生成功
?因为成功意味着条件不成立,!=success
确实是错误的。!
在此上下文中不是运算符;它只是=
运算符的左操作数。哦,我明白了。谢谢。