我如何回显 [ 4 -gt 3 ] 的值,这是 bash 中的测试表达式?

我如何回显 [ 4 -gt 3 ] 的值,这是 bash 中的测试表达式?

如何回显 [ 5 -gt 4 ] 的值,这是 bash 中的测试表达式?

[ 5 -gt 4 ] | echo

echo `[ 5 -gt 4 ]`

两者最终都会打印一个空行

@Thomas Dickey 的答案有效,但有人可以解释为什么上述两个不起作用吗?

答案1

您的命令没有按照您期望的方式工作,因为测试没有输出任何内容到其标准输出流。它是通过管道传输到管道中的下一个命令(您的第一个命令)的标准输出流,并且它是替换命令替换(您的第二个命令)的标准输出。

顺便说一句,请注意,即使第一个管道的左侧在其标准输出流上生成了某些内容,echo右侧也不会显示它。该echo实用程序不会从其标准输入中读取(但例如cat会读取)。


任何 shell 命令都会返回退出状态。例如,语句所作用的就是该退出状态if。退出状态永远不会输出到终端等,否则会干扰命令或脚本的实际输出。

当你使用

[ 3 -gt 4 ]

您可以[使用一些参数来调用该实用程序。该实用程序返回退出状态。它完全相当于

test 3 -gt 4

请参阅man testand man [(或help testbashshell 中)。

最近执行的命令的退出状态存储在特殊变量中$?

您可以将其保存在普通变量中,或将其输出到终端:

[ 3 -gt 4 ]
printf 'Exit status of test was %s\n' "$?"
printf 'Exit status of printf was %s\n' "$?"

注意printf 产生自己的退出状态,因此如果调用printf正常,则$?在输出测试状态后该值将为零。

上面的代码可能会输出

Exit status of test was 1
Exit status of printf was 0

注意测试本身从不在这里输出任何内容。它只是提供退出状态。

答案2

只是这个:

[ 5 -gt 4 ]
echo $?

相关内容