在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^^}