参考http://tldp.org/LDP/abs/html/testconstructs.html的指南,有一句话说:" if COMMAND" construct返回COMMAND的退出状态。
我理解if构造是如何工作的,但不知何故不明白这句话是什么意思。我认为http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html的指南更清楚地解释了它。 ABS指南中是否缺少某些内容?
答案 0 :(得分:3)
这意味着什么:
if false; then
:
else
echo "Exit status is $?"
fi
false
的退出状态已通过,因此显示退出状态的$?
仍可在后续行调用的echo
中使用。
构造是否通过退出状态更直接重要的是变量赋值。
比较以下两个:
# passes through exit status
var=$(echo "hello"; false) # var=hello; $?=1
# masks exit status
declare var=$(echo "hello"; false) # var=hello; $?=0
declare
(如local
)不会通过分配期间执行的任何命令替换的退出状态;因此,它通过返回自己的退出状态(0,除非传递了无效的变量名称或在其自己的操作中有错误)来屏蔽可能发生的任何故障。
因此,如果要声明一个变量local并从命令替换中分配一个值而不丢弃退出状态,最佳做法是使用两个单独的行:
somefunc() { # local only makes sense inside a function
local var # declare your local variables first...
var=$(echo "hello"; false) # ...then use them separately.
}