Bash:最后的Returncode填充变量

Bash: Last Returncode filling variables

在 bash 我可以用 $? 得到最后一个命令的 Return 代码。 这通过填充变量不起作用,如图所示:

VARIABLE=`echo "My great Text"`

Return 代码始终为 0。 我怎样才能得到命令的Return代码?

您示例中的 VARIABLE 将获得命令的输出

echo $VARIABLE

My great Text

你需要用 $?

得到之后的结果值

echo 将始终 return 0 因为没有理由它会在这里失败。

一般情况下,您可以这样查看状态:

output=`script.sh`
retval="$?"
echo "Script output is: " $output
echo "Script return value is: " $retval

http://mywiki.wooledge.org/BashFAQ/002

注意,如果您使用 exit <code>,这将读取脚本的 return 值(我相信是这样)。如果return值是脚本的输出,

retval=`script.sh'

应该使用(但它本身不是 return 值)

查看下一个示例:

serga@XXX:~$ false
serga@XXX:~$ v="My great text $?"
serga@XXX:~$ echo $v
My great text 1
serga@XXX:~$ true
serga@XXX:~$ v="My great text $?"
serga@XXX:~$ echo $v
My great text 0

您的代码已经完成了您的要求。为了看到它,您只需将 echo 替换为您在评论中提到的 script.sh 或其他可以 return 非零状态的命令。 $? 将设置为用于变量赋值的子 shell 的退出状态。

例如,这正确地报告 $? 是 1:

FOO=`echo "My great Text" ; false` ; echo $?

同样,这报告说 $? 是 0:

FOO=`echo "My great Text" ; true` ; echo $?

抱歉,问题是命令没有 return 正确的值:-( 谢谢支持