【问题标题】:what does || mean when declaring variables [duplicate]是什么 ||声明变量时的意思[重复]
【发布时间】:2021-09-16 13:50:54
【问题描述】:

大家好,我想知道 ||声明变量时工作?您可以在下面代码的第 3 行中看到这一点。 $output 设置为一个函数,然后 $error 变量设置为 || 之后的前一个命令的退出代码。是什么||这种情况下怎么办/如何处理?

 if [ "$ENABLED" = "yes" ] || [ "$ENABLED" = "YES" ]; then
    log_action_begin_msg "Starting firewall:" "ufw"
    output=`ufw_start` || error="$?"  <-- HERE
    if [ "$error" = "0" ]; then
        log_action_cont_msg "Setting kernel variables ($IPT_SYSCTL)"
    fi
    if [ ! -z "$output" ]; then
        echo "$output" | while read line ; do
            log_action_cont_msg "$line"
        done
    fi
else
    log_action_begin_msg "Skip starting firewall:" "ufw (not enabled)"
fi

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    一般来说,赋值的退出状态是0。但是当存在命令替换时,退出状态是命令替换的退出状态,在本例中为ufw_start

    所以如果ufw_start 失败,它的非零退出状态存储在变量error 中。

    另外,由于error仅用于查看其值是否为0,因此可以完全消除。

    if output=$(ufw_start); then
        log_action_cont_msg "..."
    fi
    

    【讨论】:

    • 啊,好的。那么在命令替换期间会发生什么?该命令是在内部以某种方式执行以获得退出状态,还是只是检查语法没有错误/函数存在?
    • 它被执行:它的输出被分配给output
    【解决方案2】:

    就像 && , ||是一个 bash 控制运算符: && 表示只有在前面的语句成功执行时才执行后面的语句(返回退出代码零)。 ||表示只有在前面的语句失败时才执行后面的语句(返回非零退出代码)。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2010-09-19
      • 2016-12-14
      相关资源
      最近更新 更多