Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash if语句在不同位置使用感叹号生成不同的结果_Bash - Fatal编程技术网

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
确实是错误的。
在此上下文中不是运算符;它只是
=
运算符的左操作数。哦,我明白了。谢谢。