sureshvv Asked: 2024-06-03 14:12:25 +0800 CST2024-06-03 14:12:25 +0800 CST 2024-06-03 14:12:25 +0800 CST 为什么 grep 的退出状态在此脚本中不起作用? 772 这是脚本: echo a | grep b if [ $? ]; then echo b fi 我希望它不会打印任何东西。 shell-script 1 个回答 Voted Best Answer Kamil Maciorowski 2024-06-03T14:22:42+08:002024-06-03T14:22:42+08:00 []在测试参数是否为非空字符串之前仅使用一个参数。在您的情况下,$?扩展为非空字符串并且测试成功。 [ "$?" -eq 0 ]将检查 是否$?在数值上等于0。我想这更接近你想做的事情。 注意[不是语法,而是命令。一般来说,if和之间的整个内容then是一段 shell 代码,其最终退出状态对 很重要if。如果if [ "$?" -eq 0 ]; then相关退出状态来自[.此退出状态在很大程度上取决于前一个命令的退出状态(存储在$?);那为什么不直接使用前面的命令呢?你可以(而且应该)这样做,if echo a | grep b; then而不是玩弄$?.当您可以直接依赖退出状态来测试值$?时,这是不好的做法。 固定的: if echo a | grep b; then echo b fi
[
]
在测试参数是否为非空字符串之前仅使用一个参数。在您的情况下,$?
扩展为非空字符串并且测试成功。[ "$?" -eq 0 ]
将检查 是否$?
在数值上等于0
。我想这更接近你想做的事情。注意
[
不是语法,而是命令。一般来说,if
和之间的整个内容then
是一段 shell 代码,其最终退出状态对 很重要if
。如果if [ "$?" -eq 0 ]; then
相关退出状态来自[
.此退出状态在很大程度上取决于前一个命令的退出状态(存储在$?
);那为什么不直接使用前面的命令呢?你可以(而且应该)这样做,if echo a | grep b; then
而不是玩弄$?
.当您可以直接依赖退出状态来测试值$?
时,这是不好的做法。固定的: