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