变量名扩展多重替换

Phi*_*Pij 2 bash glob

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

VAR=A_B_C_D_E
Run Code Online (Sandbox Code Playgroud)

我想要的结果是A_C_E不使用临时变量。

RESULT_TMP=${VAR/_B/}
RESULT=${RESULT_TMP/_D/}
Run Code Online (Sandbox Code Playgroud)

我做了一些这样的尝试:

${${VAR/_B/}/_D/}
Run Code Online (Sandbox Code Playgroud)

没有任何成功。

任何想法?

anu*_*ava 5

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

s='A_B_C_D_E'
echo "${s//_[BD]/}"
A_C_E
Run Code Online (Sandbox Code Playgroud)

_[BD]将匹配_Bor_D并将//进行全局替换。


编辑:关于附加问题:

但如果 B 和 D 是字符串:A_FOO_C_BAR_E

extglob在这种情况下你可以使用:

shopt -s extglob

s=`A_FOO_C_BAR_E`
echo "${s//_@(FOO|BAR)/}"
A_C_E
Run Code Online (Sandbox Code Playgroud)