我希望将变量的值设置为一个(如果已经设置)或另一个(如果不是)。这是我的意思的一个例子
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"会很高兴。
是否可以在一行中完成此操作?
答案 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)