一个声明中有两个Bash替换?

时间:2017-12-12 07:43:04

标签: 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的第一个sub。

1 个答案:

答案 0 :(得分:3)

据我所知,这在Bash中是不可能的。

您可以做的最好的事情是将它们写在多行上,或使用NOP命令,或使用实用程序:

myvar=${myvar:-replacement}
myvar=${myvar/src/dest}
myvar=$(sed 's/src/dest/g' <<< ${myvar:-defaulttext})