我有一个变量让我们调用它:ENV
可以设置或不设置,如果设置它是小写的。根据我的ENV
,我想获得一些其他变量(例如:URL_DEV
或URL_PROD
)。
我知道我可以使用ENV=${ENV^^}
以大写字母获取我的环境,并使用ENV=${ENV:-DEFAULT}
设置默认值但是可以在一行中执行吗?
通常,如何在变量上组合bash运算符?
我尝试过类似ENV=${ENV^^:-DEFAULT}
的内容,但无法按预期工作。
我的解决方案是:
ENV=${ENV:-dev}
ENV=${ENV^^}
答案 0 :(得分:5)
您无法在bash
shell中实现嵌套参数扩展,尽管可能在zsh
中实现,因此默认情况下无法执行ENV=${ENV^^:-DEFAULT}
操作。
您可以在case
shell中使用bash
构造形式的三元运算符,因为它没有内置运算符(? :
)
case "$ENV" in
"") ENV="default" ;;
*) ENV=${ENV^^} ;;
esac
但是你不应该为用户定义的shell变量使用大写变量名。它们仅适用于系统维护的变量。
答案 1 :(得分:2)
bash
无法进行嵌套参数扩展,您也可以使用[ ... ]
运算符检查变量是否已设置:
[ -z "$ENV" ] && echo "DEFAULT" || echo ${ENV^^}