变量名扩展多重替换
Variable name expansion multiple substitution
我想知道如何用变量扩展替换多个模式。
VAR=A_B_C_D_E
我想要的结果是 A_C_E
不使用临时变量。
RESULT_TMP=${VAR/_B/}
RESULT=${RESULT_TMP/_D/}
我做了这样的试验:
${${VAR/_B/}/_D/}
没有任何成功。
有什么想法吗?
您可以在 BASH 字符串替换中使用此 glob 模式:
s='A_B_C_D_E'
echo "${s//_[BD]/}"
A_C_E
_[BD]
将匹配 _B
或 _D
并且 //
将进行全局替换。
编辑: 关于以下的附加问题:
but in case where B and D are strings: A_FOO_C_BAR_E
在这种情况下,您可以使用 extglob
:
shopt -s extglob
s=`A_FOO_C_BAR_E`
echo "${s//_@(FOO|BAR)/}"
A_C_E
我想知道如何用变量扩展替换多个模式。
VAR=A_B_C_D_E
我想要的结果是 A_C_E
不使用临时变量。
RESULT_TMP=${VAR/_B/}
RESULT=${RESULT_TMP/_D/}
我做了这样的试验:
${${VAR/_B/}/_D/}
没有任何成功。
有什么想法吗?
您可以在 BASH 字符串替换中使用此 glob 模式:
s='A_B_C_D_E'
echo "${s//_[BD]/}"
A_C_E
_[BD]
将匹配 _B
或 _D
并且 //
将进行全局替换。
编辑: 关于以下的附加问题:
but in case where B and D are strings:
A_FOO_C_BAR_E
在这种情况下,您可以使用 extglob
:
shopt -s extglob
s=`A_FOO_C_BAR_E`
echo "${s//_@(FOO|BAR)/}"
A_C_E