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

时间:2016-05-09 10:09:51

标签: linux shell ubuntu

我有两个简单的脚本:

#!/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

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

3 个答案:

答案 0 :(得分:1)

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

来自bash manual:

  


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

如果您需要多个地方的值,那么您始终可以存储在变量中:

./this_script_return_sth.sh
rc=$?

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

答案 1 :(得分:1)

$?始终返回上次执行的shell命令的状态代码。

在您的情况下,脚本的最后一行:

echo $? 

打印上次执行的命令的返回码:

echo "previous script return value: $?"

而不是剧本。

答案 2 :(得分:0)

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

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

在您的第一个脚本中,您将发送105作为退出代码,因此打印出来:

previous script return value: 105

下一行,echo $?返回0以成功执行最后一个命令。

您的脚本按预期工作。

有关详细信息,请参阅Exit status