Alpine `sh`のifブロックのパターンマッチング

Alpine `sh`のifブロックのパターンマッチング

次のbash式をコピーするには:

if [[ "$foo" =~ (bar|spam) ]]; then
  echo "True"
fi

アルプスで/bin/sh

そのまま入力するとエラーになります。

/bin/sh: syntax error: unexpected "(" (expecting "then")

ベストアンサー1

fooシェル変数にサブストリングが含まれているかbarどうかをテストするには、spam標準case ... esacステートメントを使用してこれを実行できます。

case $foo in
    *bar*|*spam*) echo True
esac

「万能」ケースが必要な場合は、最後にパターンがある別のケースを使用してください*

case $foo in
    *bar*|*spam*) echo True ;;
    *) echo False
esac

使用されるパターンは、case ... esac正規表現ではなくシェルワイルドカードパターンです。したがって、パターンは文字列全体と一致する必要があるため、*各部分文字列の周りを使用して両側に追加の文字を許可します。照会各ケースには、区切りパターンリストとリストのパターンが一致したときに実行される照会リストがcase ... esac使用されます。|ケースの説明は次に終了する;;(最後のケースでは省略可能)。シェルは一致するパターンを使用して最初のケースのコードを実行します。

上記の2番目のコードブロックは、次のように書くこともできます。

case $foo in (*bar*|*spam*) echo True ;; (*) echo False; esac

パターンの開き括弧は常にオプションです。

おすすめ記事