私はこの投稿にコメントしています: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番目の時間を返す必要があることを__
意味します。これは予想されます。echo
123__456
私は何を見逃していますか?
答え1
POSIX シェルの場合は標準を使用します。パラメータ拡張:
var="abc_def__123__456"
echo "${var%%__*}"
echo "${var#*__}"
出力:
abc_def
123__456