Unix中的测试命令不会显示输出


20

当我在终端输入

test 4 -lt 6

我没有任何输出。为什么不?我需要0或1


1
如果“测试”具有立即输出值的选项,会不会很好?只是选择。这就是我们所需要的。
托德·沃尔顿

Answers:


15

您得到0或1。在退出代码中。

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

更新:要存储退出代码以供以后使用,只需将其分配给变量:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1

1
有没有办法传递退出代码?
indieman

3
否。只能重定向输出。无论如何,通常不需要这样做。要存储它供以后使用,只需将其分配给一个变量。或告诉我们您使用该值的意图是什么。
manatwork,2012年

2
将退出代码放入$?变量中-至少直到它被您执行的下一个命令覆盖为止。
Shadur 2012年

1
PS:可以使用$PIPESTATUS阵列来获得在管道的多个命令的结果。如果关闭选项(默认),$?它将是管道中最后一个命令的结果。pipefail
l0b0 2012年

@indieman,如果您需要的是根据出口状态做些其他事情,那么您甚至不需要保存它,只需使用if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard

5

另一种方法是

test 4 -lt 6 && echo 1 || echo 0

但是在这种情况下要小心。如果test返回成功和echo 1失败,echo 0则将执行。


2

如果要比较标准输出而不是退出代码的结果,可以使用以下expr(1)命令:

$ expr 4 '<=' 6
1

有两件事要注意:

  1. 您可能需要引用运算符,因为其中很多与shell元字符冲突
  2. 输出值与的返回码相反testtest为true返回0(这是退出代码的标准),但expr为true打印1。

1
3.有一个test内置的shell,它比coreutils软件包中的testexpr可执行文件要快得多(在我的机器上约为50倍)。
manatwork,2012年

+1为第二点。如果弄乱了它,可能会发现一个非常令人沮丧的错误。
伊曼纽尔·伯格

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.