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

标签 linux bash scripting

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

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

对比

    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"; }

最佳答案

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

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

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

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

关于linux 大括号而不是 if-then-else-fi do-done,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828762/

相关文章:

c - 打开源和目的地之间的UDP套接字,修改它并将其转发到原始目的地

linux - 字符串选择并附加到另一个字符串

linux - RELP 是否存在于 RSYSLOG 协议(protocol)之外?

c - 为什么这样的结构体包含两个仅包含一个元素的数组字段?

json - 在Powershell中从JSON转换为CSV

linux - 如何创建配置脚本?

bash - 在本地和远程机器上运行的 Shell 脚本

linux - 修复 awk 命令中数据与本地不匹配的问题

bash - 使用 shell 脚本将零填充为二进制数

windows - "fuser -k <folder>"的 Windows 批处理等价物是什么?