?(pattern-list)
オプションの in bash
(extglob
シェルオプションがオンの場合) とデフォルトの inの使用を理解していると思い ましたksh
。たとえば、bash
次のようになります。
$ shopt -s extglob
$ V=35xAB
$ echo "${V#?(35|88)x}" "${V#35}"
AB xAB
しかし、一致するプレフィックス パターンが one?()
または oneである場合、これはオプション パターン*()
と呼ばれるものを導入し、が使用されない限り省略されません。35
##
$ echo "${V#?(35|88)}" "${V#*(35|88)}" # Why 35 is not left out?
35xA 35xA
$ echo "${V##?(35|88)}" "${V##*(35|88)}" # Why is it omitted when ## is used?
xA xA
および が一致するサフィックス パターンで使用されている場合(?()
およびを使用)、同じ動作が報告されます。*()
%
%%
$ echo "${V%5?(xA|Bz)}" # 5xA is omitted
3
$ echo "${V%?(xA|Bz)}" "${V%*(xA|Bz)}" # why xA is not left out?
35xA 35xA
$ echo "${V%%?(xA|Bz)}" "${V%%*(xA|Bz)}" # xA is omitted when %% is used
35 35
bash
リリース 3.2.25、4.1.2、および 4.1.6 でこの問題をテストしましたが、おそらく、パターンを照合するための実際の基本的なシェル メカニズムを正しく理解していなかったと思います。
誰かがこれに光を当てることができますか?
前もって感謝します