複数の括弧を入れ替える方が良いです。

複数の括弧を入れ替える方が良いです。

単一の置換の場合、中かっこは正しく機能します
が、複数の置換の解決策が見つかりません。トリックとは何ですか?
または、
複数の置換の場合は sed を使用し、単一の交換の場合は中括弧方式を使用します。

#example vars
addons="WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL READ_SDT_CHARSETS WITH_DEBUG MODULE_MONITOR"
protocols="MODULE_hans MODULE_paul MODULE_klaus MODULE_franz"
readers="READER_foo READER_bar READER_foobar READER_barfoo"
card_readers="CARDREADER_type1 CARDREADER_type2 CARDREADER_type3"

_create_module_arrays(){
i=0;
for e in $(echo "$addons" | sed 's/WEBIF_//g;s/WITH_//g;s/MODULE_//g;s/HAVE_//g;s/_CHARSETS//g;);
do
<------>SHORT_ADDONS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${protocols//MODULE_/};
do
<------>SHORT_PROTOCOLS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${readers//READER_/};
do
<------>SHORT_READERS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${card_readers//CARDREADER_/};
do
<------>SHORT_CARD_READERS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in $addons $protocols $readers $card_readers;
do
<------>ALL_MODULES_LONG+=($e);
done;
for e in "${SHORT_MODULENAMES[@]}";
do
<------>INTERNAL_MODULES["$e"]="${ALL_MODULES_LONG[i]}";((i++));
done;
};

ベストアンサー1

Bashからこれらのパターンを削除するには、拡張パターンマッチングを使用できます。

# optional - save extglob state
$ shopt -q extglob && extglob_disabled=false || extglob_disabled=true

# enable extended pattern matching
$ shopt -s extglob

$ addons="WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL READ_SDT_CHARSETS WITH_DEBUG MODULE_MONITOR"
$ echo ${addons//@(WEBIF_|WITH_|MODULE_|HAVE_|_CHARSETS)}
LIVELOG JQUERY TOUCH SSL READ_SDT DEBUG MONITOR

# optional - restore extglob state
$ $extglob_disabled && shopt -u extglob

おすすめ記事