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

linux花括号,而不是if-then-else-fi-do-done,linux,bash,scripting,Linux,Bash,Scripting,花括号是否适合替代其他结构 [ -n "$TEST" ] && { XX='yes'; echo 'yes' } || { XX='no'; echo 'no' } vs 另一个: for num in {000..2}; do echo "$num"; done 或 在第一个示例中,A&B|C和如果A;如果B具有非零退出状态,则B else C具有不同的行为 [ -n "$TEST" ] && { echo this; false; } ||

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

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

另一个:

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


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

[ -n "$TEST" ] && { echo this; false; } || { echo "this too?"; }
您的第二个示例是应该是语法错误。文档中没有说明可以用另一个复合命令(即
{…}
来替换
do


更新:bash的维护人员告诉我,这是一个未记录的功能,它提供了与原始Bourne shell中未记录功能的向后兼容性。

第一点很好!这解释了我的问题的原因谢谢!。在“for”语句中,它在Ubuntu和Debian上运行良好,确实如此。不过,我不确定我是否会依赖它;它充其量只是一个未记录的功能。@fcm它在bash和ksh中工作,但在任何其他shell中都不工作
dash
无法处理它,这是Debian和Ubuntu上默认的
/bin/sh
。我向
bash
提交了一份bug报告,如果只是为了找出它工作的原因的话。似乎是一个没有文档记录的快捷方式,类似于
zsh
中提供的各种简短形式(特别是看起来像
的name…[在word…]term子列表
)。可以说,这最好是两个独立的问题——我们已经有了一个问答知识库条目,用于“a和B| | C在bash中是三元运算符吗?”问题,但我们不能用它来巩固,因为还有一个问题是关于后一种语法为什么有效。
    for num in {000..2}; { echo "$num"; }
[ -n "$TEST" ] && { echo this; false; } || { echo "this too?"; }