为什么&#34;测试<blah>&#34; bash中的表达式是真的吗?</blah>

时间:2014-08-12 19:25:46

标签: bash

我经常看到test <blah>表达式在示例中用于无限的while循环。例如while [ 1 ]; do echo "will loop endlessly"; done[ 1 ]test 1相同,但总是如此:

$ test 1
$ echo $?
0
$ 

然而,表达式不需要是整数,但也可以是单词,例如test [ blah ]。为什么test [ 1 ]test [ blah ]为真,即表达式不经过任何实际测试,是吗?

2 个答案:

答案 0 :(得分:6)

使用-n测试字符串是否为空是正确的:

test -n "$x"

并且1blah是非空字符串,因此它们会给出真正的表达式。

但至少在测试变量时不建议这样做,因为变量可以包含对test有效的运算符,结果可能会出乎意料。更喜欢使用-n

正如@Keith Thompson所建议的那样,如果要创建一个无限循环,最好只使用while truewhile :,因为它写得更清楚,并且跳过不必要的测试表达式。

对于bashfor (( ;; )); do可能会更有效率,因为它不会调用另一个内置内容并且不会继续测试$?

答案 1 :(得分:1)

$ test ""; echo $?
1

所以可能'test'将任何非空字符串计算为成功(0), 和空字符串(“”)作为失败(1)。