Case ステートメント内の有効なバージョン番号と一致します。

Case ステートメント内の有効なバージョン番号と一致します。

case仕様のバージョン番号と一致させたいです。バージョン番号は次のとおりです。

1.12.0.32
1.12.0.32.1
2.10.0.30.1.2

そしてシェル変数に保存されますversion

インターネットで検索してみると、-statementで正規表現を一致させることは難しくありませんcase。しかし、-statementでこれを行う方法についてのアイデアを持っている人、または助けることができる人はいますかcase

私は成功せずに次のことを試しました。

case "$version" in
    "([0-9]+\.*)+")
                  echo "Correct"
        ;;
                 *)
                  echo "Not Correct"
        ;;
esac

ベストアンサー1

caseシェルモードのみがサポートされ、正規表現はサポートされていません。しかし、Bashは別の構文を使用してすぐに正規表現をサポートします。

たとえば、「ドットで区切られた任意の数の小数点以下」を意味し、後に続く文字やラベルがない場合、このパターンは^[0-9]+(\.[0-9]+)*$適切です。([0-9]+\.*)+文字列を連続点または末尾の点と一致させることも可能です。たとえば、次のように1.2..3.なります。

#!/bin/bash
re='^[0-9]+(\.[0-9]+)*$';
if [[ $version =~ $re ]]; then
    echo "'$version' matches the pattern"
else
    echo "'$version' doesn't match"
fi

正規表現は、任意の小数点以下の数字([0-9]+)の後にリテラル(·)*点()と任意の数の小数点以下の\.数字()で構成される任意の数のグループ([0-9]+)を見つけることを意味します。パターンを文字列の先頭と末尾に固定^します$。それ以外の場合は、一致する部分文字列で十分です。

たとえば、123複数の数字とドットが必要な場合は^[0-9]+(\.[0-9]+)+$(最後の数字*をに変更+)を使用します。

ロケールによっては、[0-9]一致する内容が多少奇妙になる可能性があります。許可されている文字を綴ると[0123456789]より厳しくなりますが、書くのが難しく、エラーが発生しやすくなります。

おすすめ記事