我正在写一些“如果那么”的陈述,发现在我看来是一种奇怪的行为。经过调查,我意识到它归结为我正在进行的比较的退出代码。我在下面的代码片段中说明了我的发现。
如你看到的
rc=1
[ $rc -eq 0 ]
es_num=$?
[ $rc=0 ]
es_str=$?
echo "es_num is $es_num"
echo "es_str is $es_str"
输出
es_num is 1
es_str is 0
是否有任何文档(最好来自 POSIX 标准)讨论测试构造的退出状态-eq
和=
测试构造中的差异?
编写条件语句时应该注意什么?对此有哪些最佳实践?
可移植代码优于 Bash 代码(我正在使用)。
-eq
测试
=
测试
所以
-eq
比较整数和=
比较字符串(这也适用于一些有限的整数情况)。不过,您确实有语法问题,应该是:
并不是
[ "$rc" = 0 ]
应该以 1 退出,因为rc
不等于 0[ $rc=0 ]
实际上应该以 0 退出,因为它可能会被视为字符串,并且[
测试构造中存在的字符串将评估为 true使用 sh
[
测试有一些区别:但是 bash
[[
测试有很多不同之处(包括上面提到的那些):对于数字比较,您必须使用
-eq
while=
用于字符串比较(从您的变量命名中您似乎已经知道)。我知道的关于
test
aka命令的最佳介绍之一是The Unix Shell's Humble If[