より複雑なケースの問い合わせ正しい構文はどうですか?

より複雑なケースの問い合わせ正しい構文はどうですか?
case "$1","$name" in
    -py | --python | --python3,*) if [[ "$name" =~ \..+$ ]]; then

それは物事を捉えません。実際には、次のようなものを捉える必要があります...

USERNAME@HOSTNAME:~$ myscript --python surfer

面白い点:マルチモード条件を次のように簡素化します。

    --python,*) if [[ "$name" =~ \..+$ ]]; then

効果がある!非常に繰り返し前景のため、このセクションは3回配置する必要がありました。最初はfor -py、次はfor --python、最後に--python3すべてのパターンをキャプチャすることです。

しかし、他の点は - その逆です。

case "$1" in
    -py | --python | --python3)    if [[ ! "$name" =~ \.py$ ]]; then

とても素敵で効果的です!したがって、これは複数のパターン構文が正しくない可能性があり、スペースを削除するか、3つのパターンすべての合計の周りのすべての種類の括弧を、最初のOR、2番目のOR、3番目のパターンがキャプチャされるグループとして解釈する必要があるという仮説です。に反することです。 。

つまり、GNU bashバージョン4.3では、「$name」などの条件に加えて、マルチモードと2番目の条件の両方を持つことができないという印象を受けました。これは可能ですか?それともこれを達成しようとしている間に間違いを犯していますか?

答え1

句のオブジェクトがcase正しく一致する必要があります。

case "$1","$name" in
    -py | --python | --python3,*) if [[ "$name" =~ \..+$ ]]; then

しなければならない

case "$1","$name" in
    -py,* | --python,* | --python3,*) if [[ "$name" =~ \..+$ ]]; then

しかし、これはおそらく以下のようにあまり繰り返されず、より明確に表現されるかもしれません。

if [[ "$name" =~ \..+$ ]]; then
    case "$1" in
        -py | --python | --python3)
            do_stuff
            ;;
    esac
fi

関連情報