Bashで文字列を別の文字列または部分文字列に分割する

Bashで文字列を別の文字列または部分文字列に分割する

私はこの投稿にコメントしています:bashでいくつかの区切り文字に文字列を分割しますか?

私のシナリオでは、Bashだけを使用してこれを実行しようとしましたが、奇妙な動作が発生しました。

shopt -s extglob
export var=abc_def__123__456
echo ${var/%__*}
echo ${var/#!(__)__}
shopt -u extglob

最初はecho期待どおりに動作しますabc_def。私は2番目のecho出力を期待しましたが、123__456出力は456私が読む方法ではありません。手動、内容は次のとおりです。

もし模様「#」(上記の3番目の形式)の前には、拡張値の先頭と一致する必要があります。範囲

私にとって、これは最初の一致が発生したときに一致を停止する必要があるため、2番目の時間を返す必要があることを__意味します。これは予想されます。echo123__456

私は何を見逃していますか?

答え1

POSIX シェルの場合は標準を使用します。パラメータ拡張:

var="abc_def__123__456"
echo "${var%%__*}"
echo "${var#*__}"

出力:

abc_def
123__456

関連情報