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]
より厳しくなりますが、書くのが難しく、エラーが発生しやすくなります。