shell 使用“elif [[ -n ${var=$(mycommand... args...)} ]]”设置的变量意外为空

axr492tv  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(63)

我不确定这是否是在elif语句中定义变量的好方法。
如果VALUE包含其他内容,我想将其设置为CUSTOM_KEY,从配置Map中获取该值。
有时候,运行第二条elif语句中的命令似乎需要几秒钟的时间,我不确定它是否会影响命令的结果。

if [[ -n "${CUSTOM_KEY}" ]]; then

    VALUE="${CUSTOM_KEY}"

    echo "VALUE: ${VALUE} set from CUSTOM_KEY"

elif [[ -n "${VALUE="$(kubectl get configmap configmapvalue -n "${N}" -o jsonpath="{.data.VALUE}")"}" ]]; then

     echo "VALUE: ${VALUE} set from configmap configmapvalue"

else

     echo "Please, define a CUSTOM_VALUE"

fi

echo "${VALUE}"
z5btuh9x

z5btuh9x1#

直接的问题是${var=value}只在变量先前未设置 * 时才赋值给var *。
我们不知道它是否未被设置,因为[ -n "$var" ]只测试它是否为 empty,一个变量可以被设置为空值,在这种情况下${var=default}不会改变它,但是${var:=default}会。
但是,您不需要使用${var=default} * 或 * ${var:=default},因为如果elif子句被执行,您就知道需要从kubectl更新值。

elif VALUE=$(kubectl get configmap configmapvalue -n "$N" -o jsonpath='{.data.VALUE}') && [[ $VALUE ]]; then

相关问题