在Bash中,您可以用以下内容替换空或未定义的变量:
${myvar:-replacement}
您也可以像这样替换变量中的子字符串:
${myvar//replace this/by this}
现在,我想将两个替换组合为一个:如果变量未定义,请将其设置为replacement
,否则将其替换为其他内容。
我可以分两行编写,没有问题。
myvar=${myvar:-replacement}
myvar=${myvar//replace this/by this}
或更紧密地反映我的业务逻辑:
if [[ -n "${myvar:-}" ]]; then
myvar="${myvar//replace this/by this}"
else
myvar="replacement"
fi
有没有一种方法可以将两个替换合并为一条语句/一行?
我尝试了这个没有成功:
myvar=${${myvar:-replacement}//replace this/by this} # bad substitution
我set -u
在脚本中使用的是当我使用未定义的变量时它们会出错。这就是为什么我需要未定义var上的第一个子对象的原因。
据我所知,这在Bash中是不可能的。
最好的办法是多行编写它们,或者使用NOP命令,或者使用实用程序:
myvar=${myvar:-replacement}
myvar=${myvar/src/dest}
myvar=$(sed 's/src/dest/g' <<< ${myvar:-defaulttext})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句