Bash 变量名扩展多重替换

Bash 变量名扩展多重替换,bash,glob,Bash,Glob,我想知道如何用变量扩展替换多个模式 VAR=A_B_C_D_E 我想要的结果是A_C_E不使用temp变量 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 \uBD]将匹配\u B或\u D,/将进行全局替换 编辑:关于下列附

我想知道如何用变量扩展替换多个模式

VAR=A_B_C_D_E
我想要的结果是
A_C_E
不使用temp变量

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
\uBD]
将匹配
\u B
\u D
/
将进行全局替换


编辑:关于下列附加问题:

但如果B和D是字符串:
A\u FOO\u C\u BAR\u E

在这种情况下,您可以使用
extglob

shopt -s extglob

s=`A_FOO_C_BAR_E`
echo "${s//_@(FOO|BAR)/}"
A_C_E

可以在BASH字符串替换中使用此glob模式:

s='A_B_C_D_E'
echo "${s//_[BD]/}"
A_C_E
\uBD]
将匹配
\u B
\u D
/
将进行全局替换


编辑:关于下列附加问题:

但如果B和D是字符串:
A\u FOO\u C\u BAR\u E

在这种情况下,您可以使用
extglob

shopt -s extglob

s=`A_FOO_C_BAR_E`
echo "${s//_@(FOO|BAR)/}"
A_C_E

很好,但是如果B和D是字符串:A_FOO_C_BAR_EFine,但是如果B和D是字符串:A_FOO_C_BAR_E