我在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 in %s" "$workdir"
else
rm -rf "$workdir"
fi
fi
exit ${1:0}
}
这里的exit ${1:0}
是多余的吗?为什么不简单地写exit $1
。我用1,-1,130之类的参数测试了这个函数,简单和复杂版本没有区别。
答案 0 :(得分:2)
这允许它在没有参数(或空字符串参数)的情况下使用,并产生exit 0
。这与单独使用exit
不同,因为exit
单独使用上一个命令的退出状态。即使msg
或rm
不会导致状态不是0,这也可以避免作者在更改代码时考虑这一点。
答案 1 :(得分:2)
就目前而言,从索引0获取变量的子字符串似乎是多余的......同样的值。但是,要退出的空字符串与exit 0
相同。现在,如果它是exit ${1:-0}
它将完全合理 - 那么0(成功)将是默认退出值,并且将在没有参数$1
的情况下使用。但是,显式传递0不是必需的。
答案 2 :(得分:0)
要添加到其他答案:在这种情况下它是多余的,因为没有任何参数的exit
将与exit 0
具有相同的方式。因此exit $1
和exit ${1:-0}
实际上是相同的。