将命令替换输出分配给内部变量直到测试

assign command substitution output to a variable inside until test

我期待以下片段

until [ MY_VAR=$(echo my_var_val) ]
do
 echo 'inside the loop'
done 

echo $MY_VAR

生成 my_var_val 输出。但是,这不会发生。我怎样才能做到这一点?

长话短说

我想对生成一些输出的脚本执行重试。我需要稍后在脚本中输出。不幸的是,在 until 测试中分配变量值失败 - 当我稍后尝试在脚本中使用它时,该变量具有空值。如何使用重试逻辑执行外部脚本并将其输出存储在我稍后可以在脚本中使用的变量中?

max_retry=10
counter=0
until [ IMPORTANT_SCRIPT_OUTPUT=$(python very_important_script_with_output.py) ]
do
 #retry logic
 if [[ counter -eq $max_retry ]]; then
   echo "Failed"
   exit 1
 fi
 ((counter++))
 echo "very_important_script_with_output failed, retrying"
done 

python another_very_important_script_with_the_previous_script_output_as_parameter.py --important-parameter $IMPORTANT_SCRIPT_OUTPUT

[是普通命令,不是shell语法,它的参数是正常处理的。所以MY_VAR=$(echo my_var_val)只是一个以MY_VAR=开头的字符串,不是变量赋值。

将赋值与测试变量分开进行。

while :
do
    MY_VAR=$(command)
    if [[ -n "$MY_VAR" ]]
    then break
    fi
    echo 'inside the loop
done

你可以试试这个:

until MY_VAR=$(echo my_var_val); test -n "$MY_VAR"
do
 echo 'inside the loop'
done 

echo $MY_VAR