在bash中组合多个参数扩展操作

时间:2018-03-28 07:05:22

标签: bash shell

我有一个变量让我们调用它:ENV可以设置或不设置,如果设置它是小写的。根据我的ENV,我想获得一些其他变量(例如:URL_DEVURL_PROD)。

我知道我可以使用ENV=${ENV^^}以大写字母获取我的环境,并使用ENV=${ENV:-DEFAULT}设置默认值但是可以在一行中执行吗?

通常,如何在变量上组合bash运算符?

我尝试过类似ENV=${ENV^^:-DEFAULT}的内容,但无法按预期工作。

我的解决方案是:

ENV=${ENV:-dev}
ENV=${ENV^^}

2 个答案:

答案 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^^}