Bash:使用exit${1:0}而不是exit$1有什么好处
我在Archlinux的mkinitcpio脚本中发现了以下代码片段Bash:使用exit${1:0}而不是exit$1有什么好处,bash,Bash,我在Archlinux的mkinitcpio脚本中发现了以下代码片段 cleanup() { if [[ $workdir ]]; then # when PRESET is set, we're in the main loop, not a worker process if (( SAVELIST )) && [[ -z $PRESET ]]; then msg "build directory saved i
cleanup() {
if [[ $workdir ]]; then
# when PRESET is set, we're in the main loop, not a worker process
if (( SAVELIST )) && [[ -z $PRESET ]]; then
msg "build directory saved in %s" "$workdir"
else
rm -rf "$workdir"
fi
fi
exit ${1:0}
}
这里的出口${1:0}是多余的吗?为什么不直接写退出$1呢。我使用参数(如1、-1、130)测试了该函数,简单版本和复杂版本之间没有差异。这允许在没有参数或空字符串参数的情况下使用该函数,并导致退出0。这与单独使用exit不同,因为exit单独使用上一个命令中的exit状态。即使msg或rm不会导致0以外的状态,这也避免了作者在更改代码时必须考虑这一点。这允许在没有参数或空字符串参数的情况下使用它,并导致退出0。这与单独使用exit不同,因为exit单独使用上一个命令中的exit状态。即使msg或rm不会导致0以外的状态,这也避免了作者在更改代码时必须考虑这一点。目前看来,从索引0中获取变量的子字符串似乎是多余的。。。同样的价值。但是,要退出的空字符串与退出0相同。现在,如果它是exit${1:-0},这将非常有意义-那么0 success将是默认的exit值,并将在缺少参数$1的情况下使用。但是,显式传递0是不必要的。目前看来,从索引0中获取变量的子字符串似乎是多余的。。。同样的价值。但是,要退出的空字符串与退出0相同。现在,如果它是exit${1:-0},这将非常有意义-那么0 success将是默认的exit值,并将在缺少参数$1的情况下使用。但是,显式传递0是不必要的。要添加到其他答案中:在这种情况下是多余的,因为不带任何参数的exit与exit 0的方式相同。因此,exit$1和exit${1:-0}实际上是相同的。添加到其他答案中:在这种情况下是多余的,因为没有任何参数的exit与exit 0的方式相同。因此,exit$1和exit${1:-0}实际上是相同的。是的,我知道诀窍`exit${1:-0},它将0作为默认的退出值。但是这一个非常不同。是的,我知道诀窍'exit${1:-0},它将0作为默认的退出值。但这一个太不一样了。