linux大括号而不是if-then-else-fi do-done

时间:2016-08-08 12:05:33

标签: linux bash scripting

花括号是否适合替代其他结构?

    [ -n "$TEST" ] && { XX='yes'; echo 'yes' } || { XX='no'; echo 'no' }

VS

    if [ -n "$TEST" ] ; then
       XX='yes'; echo 'yes'
    else 
       XX='no'; echo 'no'
    fi
另一个:

    for num in {000..2}; do echo "$num"; done

    for num in {000..2}; { echo "$num"; }

1 个答案:

答案 0 :(得分:3)

在您的第一个示例中,如果A && B || C的退出状态为非零,则if A; then B else CB会有不同的行为。

[ -n "$TEST" ] && { echo this; false; } || { echo "this too?"; }

你的第二个例子应该是语法错误。文档中没有任何内容表明您可以将do / done对替换为另一个复合命令({...}是什么)。

更新:bash的维护者告诉我,这是一个未记录的功能,它向后兼容原始Bourne shell中的未记录的功能。