Bash “这对”意味着什么;“如果命令”;要通过命令的退出状态?

Bash “这对”意味着什么;“如果命令”;要通过命令的退出状态?,bash,Bash,参考处的指南,有一行是这样写的:“if COMMAND”构造返回COMMAND的退出状态 我理解if结构是如何工作的,但不知何故我不明白这句话的意思。我认为《指南》对它的解释要清楚得多。ABS指南中是否有我遗漏的内容?这意味着: if false; then : else echo "Exit status is $?" fi false的退出状态被传递,因此显示退出状态的$?在作为后续行调用的echo中仍然可用 构造是否通过退出状态更直接重要的一种情况是变量赋值 比较以下两种情况:

参考处的指南,有一行是这样写的:“if COMMAND”构造返回COMMAND的退出状态


我理解if结构是如何工作的,但不知何故我不明白这句话的意思。我认为《指南》对它的解释要清楚得多。ABS指南中是否有我遗漏的内容?

这意味着:

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,除非传递了无效的变量名或在自己的操作中有错误)来掩盖可能发生的任何故障

因此,如果要声明一个局部变量并从命令替换中赋值,而不放弃退出状态,最佳做法是使用两行:

somefunc() {                  # local only makes sense inside a function
  local var                   # declare your local variables first...
  var=$(echo "hello"; false)  # ...then use them separately.
}

这意味着:

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,除非传递了无效的变量名或在自己的操作中有错误)来掩盖可能发生的任何故障

因此,如果要声明一个局部变量并从命令替换中赋值,而不放弃退出状态,最佳做法是使用两行:

somefunc() {                  # local only makes sense inside a function
  local var                   # declare your local variables first...
  var=$(echo "hello"; false)  # ...then use them separately.
}

仅供参考,ABS是一个非常非常差的参考。不使用它是明智的。bash黑客维基或wooledge维基都要好得多……wooledge维基上相应的页面是;bash黑客wiki上的相应页面是我看到的。谢谢你的推荐!仅供参考,ABS是一个非常非常差的参考。不使用它是明智的。bash黑客维基或wooledge维基都要好得多……wooledge维基上相应的页面是;bash黑客wiki上的相应页面是我看到的。谢谢你的推荐!