Linux

bash + 使用正則表達式比較字元串

  • January 26, 2021

在我的 bash 腳本中,我想驗證字元串是否是磁碟

所以我做了下面的例子

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

但實際上表達式並不能辨識 $ disk ( $ 磁碟可以是例如 sda sdb sdc sdd 等)

例如

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

也不如

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

我錯在哪裡?

=~是一個二元運算符,來自手冊3.2.5.2 Conditional Constructs

額外的二元運算符’=~’ 可用,其優先級與’==’ 和’!=’ 相同。使用時,運算符右側的字元串被視為 POSIX 擴展正則表達式

$$ … $$

{a..z}是大括號擴展 3.5.1大括號擴展

大括號擴展是一種可以生成任意字元串的機制。


所以你需要一個正則表達式模式來匹配字元串:

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

引用自:https://unix.stackexchange.com/questions/631045