Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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语句中的then部分吗?_Bash - Fatal编程技术网

Bash 我可以省略if语句中的then部分吗?

Bash 我可以省略if语句中的then部分吗?,bash,Bash,对于以下内容,正确的bash语法是什么: if [ "$actual" == "$expected" ]; then doNothing else echo "Error: actual: $actual. Expected: $expected" fi 我正在寻找一种适用于变量“实际”和“预期”的所有可能值的方法。不得以任何方式解释/评估/扩展变量的内容。脚本不需要是可移植的(只有bash的解决方案是可以的)。您是否尝试过: if [ "$actual" != "$expecte

对于以下内容,正确的bash语法是什么:

if [ "$actual" == "$expected" ]; then 
  doNothing
else 
  echo "Error: actual: $actual. Expected: $expected"
fi
我正在寻找一种适用于变量“实际”和“预期”的所有可能值的方法。不得以任何方式解释/评估/扩展变量的内容。脚本不需要是可移植的(只有bash的解决方案是可以的)。

您是否尝试过:

if [ "$actual" != "$expected" ]; then 
  echo "Error: actual: $actual. Expected: $expected"
fi
您是否尝试过:

if [ "$actual" != "$expected" ]; then 
  echo "Error: actual: $actual. Expected: $expected"
fi

您可以使用最简单的“不做任何事情”语句:

if [ "$actual" = "$expected" ]; then 
  :
else 
  echo "Error: actual: $actual. Expected: $expected"
fi
(注意:一个
=
而不是
[
/
测试中的两个)

但更好的办法是颠倒测试,完全不需要这样做:

if [ "$actual" != "$expected" ]; then
  echo "Error: actual: $actual. Expected: $expected"
fi

您可以使用最简单的“不做任何事情”语句:

if [ "$actual" = "$expected" ]; then 
  :
else 
  echo "Error: actual: $actual. Expected: $expected"
fi
(注意:一个
=
而不是
[
/
测试中的两个)

但更好的办法是颠倒测试,完全不需要这样做:

if [ "$actual" != "$expected" ]; then
  echo "Error: actual: $actual. Expected: $expected"
fi
使用内置的
[[
test
/
[
有几个优点。首先,如果不引用包含空格的变量,就不会被咬

[[]]
还提供了
用于区域设置感知词典排序、正则表达式匹配和
=~
检查

(请注意Etan对至少一个不同意见的评论。我还没有决定这是一个缺点还是一个需要利用的特性,但这确实令人惊讶。)

还有一件事是把
然后
放在另一行,但那只是个人喜好

使用内置的
[[
test
/
[
有几个优点。首先,如果不引用包含空格的变量,就不会被咬

[[]]
还提供了
用于区域设置感知词典排序、正则表达式匹配和
=~
检查

(请注意Etan对至少一个不同意见的评论。我还没有决定这是一个缺点还是一个需要利用的特性,但这确实令人惊讶。)



还有一件事是把
然后
放在一个单独的行上,但这只是个人偏好。

-ne
是一个数字比较
!=
是字符串比较。它们是不等价的。确切的区别是什么?一个变量也可以包含一个数字值,不是吗?变量c之间有区别吗包含数字1或文本1?区别在于值不是数字。
[5=5]
[5-ne 3]
都是真的,但是
[5-ne foo]
将是运行时错误,而
[5!=foo]
将为false。如果我事先不知道变量包含字符串、数值或其他内容,我应该使用什么?@etan:07和7是相同的数字和不同的字符串。举个例子。
-ne
是数字比较
!=
是字符串比较。它们不相等。确切的区别是什么?变量也可以包含数值,不是吗?包含数字1或文本1的变量之间有区别吗?区别在于值不是数字。
[5=5]
[5-ne 3]
都是真的,但
[5-ne foo]
将是运行时错误,而
[5!=foo]
将为false。如果我事先不知道变量包含字符串、数值或其他内容,我应该使用什么?@etan:07和7是相同的数字和不同的字符串。就像一个例子。为什么不扩展
[
相对于
[
的优势呢?
[
也有(至少有)一个缺点是数字比较。它递归地扩展非数字值(关于这一点,请参阅我的问题)。@arco444:我添加了在问题范围内起作用的差异。@Etan:很好的捕捉和警告。这些优点是什么?在另一行上有什么好处?与[[和]的确切区别是什么[?为什么不扩展
[
相对于
[
的优势?
[[
也(至少)有一个数值比较的缺点。它递归地扩展非数值(请参阅我的问题了解一点)@arco444:我在问题的范围内添加了重要的差异。@Etan:好的捕获和警告。这些优势是什么?在另一行上有什么好处?和的确切区别是什么?我刚刚在这里读到了一个公认的答案(我再也找不到了)这建议使用==而不是=。区别是什么?对于简单的情况,两者似乎都起作用。==?的否定是什么?是!==?。POSIX
[
/
测试使用
=
表示相等,使用
!=
表示不等()。bash(可能还有许多其他shell)在这种用法中也接受
=
,但它不是严格的规范。bash特定的
[[
内置测试语法()使用
=
/
!=
(但出于理智的考虑,也接受
=
)。如果应该使用[or[],似乎没有共识。它们是不同的。
[
是可移植的。
[[
是一个bash-ism。
[
有一些很好的安全特性,而
[
没有(但至少有一个缺点,请参阅我对DevSolar答案的评论)。
[[
支持一些
[
不支持的测试。你说的“不严格规范”是什么意思?我认为不同的shell无论如何都不兼容?我只是在这里读到了一个公认的答案(我再也找不到了),建议使用==而不是=。有什么区别吗?对于简单的情况,两者似乎都起作用。对==?是!==?。POSIX
[
/
test
使用
=
表示相等,使用
!=
表示不等()。bash(可能还有许多其他shell)也接受
=
这种用法,但它不是严格的规范。bash特定的
[
构建