4

?(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 でこの問題をテストしましたが、おそらく、パターンを照合するための実際の基本的なシェル メカニズムを正しく理解していなかったと思います。

誰かがこれに光を当てることができますか?

前もって感謝します

4

1 に答える 1