上的第一个子
在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})