在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。
答案 0 :(得分:3)
据我所知,这在Bash中是不可能的。
您可以做的最好的事情是将它们写在多行上,或使用NOP命令,或使用实用程序:
myvar=${myvar:-replacement}
myvar=${myvar/src/dest}
myvar=$(sed 's/src/dest/g' <<< ${myvar:-defaulttext})