对于"如果命令"它意味着什么?通过COMMAND的退出状态?

时间:2015-11-30 15:40:33

标签: bash

参考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指南中是否缺少某些内容?

1 个答案:

答案 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.
}