繁体   English   中英

为什么在shell脚本中$? 不能回声两次?

[英]why in shell script, $? can't echo twice?

我有两个简单的脚本:

#!/bin/sh

echo "this script return sth"

exit 105

和:

#!/bin/sh

echo "this script will print last script return"

echo "first run a script"
./this_script_return_sth.sh

echo "previous script return value: $?"
echo $? 

运行结果是:

this script will print last script return
first run a script
this script return sth
previous script return value: 105
0

我做错了什么吗? 这是否意味着如果我要使用它,最好先将其存储到某个变量中?

$? 扩展到最后一条语句的返回码。 因此,零表示最后一个 echo语句(即echo "previous script return value: $?" )成功。

bash手册:


($?)扩展为最近执行的前台管道的退出状态。

如果需要在多个位置使用该值,则始终可以将其存储在变量中:

./this_script_return_sth.sh
rc=$?

echo "previous script return value: $rc"
echo $rc

$? 总是返回最后执行的shell命令的状态码。

对于您的情况,脚本的最后一行:

echo $? 

打印最后执行的命令的返回码:

echo "previous script return value: $?"

而不是脚本。

$? 返回最后执行的命令的退出状态。

每个命令都返回退出状态(有时称为返回状态或退出代码)。 成功的命令返回0,不成功的命令返回非零值,该值通常可以解释为错误代码。

在第一个脚本中,您要发送105作为退出代码,因此它显示为:

previous script return value: 105

下一行, echo $? 返回0以成功执行上一条命令。

您的脚本按预期工作。

有关更多详细信息,请参阅退出状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM