Bash:使用exit $ {1:0}而不是退出$ 1有什么好处

时间:2012-01-30 14:19:59

标签: 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 in %s" "$workdir"                                                                                                                        
        else
            rm -rf "$workdir"
        fi
    fi

    exit ${1:0}
}

这里的exit ${1:0}是多余的吗?为什么不简单地写exit $1。我用1,-1,130之类的参数测试了这个函数,简单和复杂版本没有区别。

3 个答案:

答案 0 :(得分:2)

这允许它在没有参数(或空字符串参数)的情况下使用,并产生exit 0。这与单独使用exit不同,因为exit单独使用上一个命令的退出状态。即使msgrm不会导致状态不是0,这也可以避免作者在更改代码时考虑这一点。

答案 1 :(得分:2)

就目前而言,从索引0获取变量的子字符串似乎是多余的......同样的值。但是,要退出的空字符串与exit 0相同。现在,如果它是exit ${1:-0}它将完全合理 - 那么0(成功)将是默认退出值,并且将在没有参数$1的情况下使用。但是,显式传递0不是必需的。

答案 2 :(得分:0)

要添加到其他答案:在这种情况下它是多余的,因为没有任何参数的exit将与exit 0具有相同的方式。因此exit $1exit ${1:-0}实际上是相同的。