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