一个声明中的两个bash替换



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

最新更新