Bash多参数替换

时间:2016-08-19 18:34:43

标签: bash environment-variables

我希望将变量的值设置为一个(如果已经设置)或另一个(如果不是)。这是我的意思的一个例子

export RESULT=${VALID:+Yes:-No}

如果变量已设置,则${VALID:+Yes:-No}的值为Yes;如果不是,则No的值为if [ -n "${VALID}" ]; then export RESULT=Yes else export RESULT=No fi

我现在可以采取的一种方式:

QuerySet

可以这样做,但是有一个" one-liner"会很高兴。

是否可以在一行中完成此操作?

4 个答案:

答案 0 :(得分:1)

在一个变量分配中无法进行多个参数扩展。

不使用if语句,您只需使用几个参数扩展。

$ VALID="aaa"
$ RESULT="${VALID:+Yes}"; RESULT="${RESULT:-No}"; echo $RESULT
Yes
$ VALID=""
$ RESULT="${VALID:+Yes}"; RESULT="${RESULT:-No}"; echo $RESULT
No

这不是一个单一的陈述,但它足够短,以至于它适合一行而没有副壳的复杂性if

答案 1 :(得分:1)

您可以使用包含2个元素(no yes)的数组,并根据变量的长度决定返回哪个值:

# variable set case
>>> VALID=foo
>>> arr=(no yes) && echo "${arr[$((${#VALID} > 0))]}"    
yes

# variable not set
>>> unset VALID
>>> arr=(no yes) && echo "${arr[$((${#VALID} > 0))]}"    
no

答案 2 :(得分:1)

-v VAR printf选项是bash扩展名。没有它,您可以使用命令替换。 (变量名称故意缩小。)

printf -v result %.3s ${valid:+YES}NO

答案 3 :(得分:0)

满足一条要求:

export RESULT=$([ -n "$VALID" ] && echo Yes || echo No)