![我如何回显 [ 4 -gt 3 ] 的值,这是 bash 中的测试表达式?](https://linux22.com/image/150502/%E6%88%91%E5%A6%82%E4%BD%95%E5%9B%9E%E6%98%BE%20%5B%204%20-gt%203%20%5D%20%E7%9A%84%E5%80%BC%EF%BC%8C%E8%BF%99%E6%98%AF%20bash%20%E4%B8%AD%E7%9A%84%E6%B5%8B%E8%AF%95%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9F.png)
如何回显 [ 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 $?