如何回显 [ 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 test
and man [
(或help test
在bash
shell 中)。
最近执行的命令的退出状态存储在特殊变量中$?
。
您可以将其保存在普通变量中,或将其输出到终端:
[ 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 $?