bash + 通过正则表达式验证名称

yae*_*ael 4 linux bash shell-script regular-expression

valid当名称为 时,为什么会打印以下正则表达式hdpworker01

name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Run Code Online (Sandbox Code Playgroud)

我尝试做的是valid仅在名称匹配时才打印worker[0-999]

预期结果示例:

  • 对于name=worker01valid
  • 对于name=hdpworker01:没有输出

Kus*_*nda 8

默认情况下,正则表达式不锚定到字符串的开头或结尾。这与例如文件名通配模式不同。这意味着表达式可以匹配给定字符串中的任何位置。

要将表达式锚定到字符串的开头,请使用

^worker[[:digit:]]
Run Code Online (Sandbox Code Playgroud)

要将其附加到字符串的末尾并允许一到三个数字,请使用

^worker[[:digit:]]{1,3}$
Run Code Online (Sandbox Code Playgroud)

如果您想匹配worker10但不匹配worker01worker003(没有零填充的数字),请使用

^worker([0-9]|[1-9][0-9]{1,2})$
Run Code Online (Sandbox Code Playgroud)