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

相关内容