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

在bash中组合多参数扩展操作,bash,shell,Bash,Shell,我有一个变量,我们把它叫做:ENV,它可以设置也可以不设置,如果设置,它是小写的。根据我的ENV我想得到一些其他变量(例如:URL\u DEV或URL\u PROD) 我知道我可以使用:env=${env^^}以大写形式获取我的env,并使用env=${env:-default}设置默认值,但是可以在一行中完成吗 一般来说,如何组合变量上的bash运算符 我尝试了类似于:ENV=${ENV^^:-DEFAULT}的方法,但没有按预期工作 我的解决办法是: ENV=${ENV:-dev} ENV=

我有一个变量,我们把它叫做:
ENV
,它可以设置也可以不设置,如果设置,它是小写的。根据我的
ENV
我想得到一些其他变量(例如:
URL\u DEV
URL\u PROD

我知道我可以使用:
env=${env^^}
以大写形式获取我的env,并使用
env=${env:-default}
设置默认值,但是可以在一行中完成吗

一般来说,如何组合变量上的bash运算符

我尝试了类似于:
ENV=${ENV^^:-DEFAULT}
的方法,但没有按预期工作

我的解决办法是:

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

您无法在
bash
shell中实现嵌套参数扩展,尽管在
zsh
中可能实现,因此默认情况下无法执行
ENV=${ENV^^:-DEFAULT}
操作

您可以在
bash
shell中使用
case
构造形式的三元运算符,因为它没有内置运算符(
?:


但是对于用户定义的shell变量,不应该使用大写变量名。它们仅适用于由系统维护的变量。

嵌套参数扩展在
bash
中是不可能的,或者您可以使用
[…]
运算符检查变量是否已设置:

[ -z "$ENV" ] && echo "DEFAULT" || echo ${ENV^^}
[ -z "$ENV" ] && echo "DEFAULT" || echo ${ENV^^}