bash +正規表現を使用した文字列の比較

bash +正規表現を使用した文字列の比較

私のBashスクリプトで文字列がディスクであることを確認したいと思います。

だから、次の例を作成しました。

if [[ $disk =~ sd{a..z} ]];then
echo "we found a disk - $disk
.
.
.
.
fi

ただし、実際には式は$ diskを認識しません($ diskは、例えばsda sdb sdc sddなどです)。

例えば

disk=sdb
[[ $disk =~ sd{a..z} ]] && echo "$disk is real disk"

それほど良くない

[[ $disk =~ 'sd{a..z}' ]] 

私はどこで間違っていますか?

答え1

=~マニュアルのバイナリ演算子です。3.2.5.2 条件付き構成:

「==」と「!=」と同じ優先順位を持つ追加の二項演算子「=~」を使用することもできます。使用時の演算子の右側の文字列POSIX 拡張正規表現として扱われます。[...]

{a..z}中かっこ拡張は3.5.1です。サポート拡張:

中括弧拡張は、任意の文字列を生成できるメカニズムです。


だからあなたは正規表現文字列に一致するパターン:

$ disk=sdb    
$ [[ $disk =~ ^sd[a-z]$ ]] && echo "$disk is real disk"
$ sdb is real disk

関連情報