Linux

bash + 通過正則表達式驗證名稱

  • July 9, 2018

valid當名稱為時,為什麼會列印以下正則表達式hdpworker01

name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid

我嘗試做的是valid僅在名稱匹配時列印worker[0-999]

預期結果範例:

  • 對於name=worker01valid
  • 對於name=hdpworker01:無輸出

預設情況下,正則表達式不錨定到字元串的開頭或結尾。這與例如文件名通配模式不同。這意味著表達式可以匹配給定字元串中的任何位置。

要將表達式錨定到字元串的開頭,請使用

^worker[[:digit:]]

要另外將其錨定到字元串的末尾並允許一到三位數字,請使用

^worker[[:digit:]]{1,3}$

如果要匹配worker10但不匹配worker01worker003(沒有零填充數字),請使用

^worker([0-9]|[1-9][0-9]{1,2})$

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