bash +正規表現による名前解決

bash +正規表現による名前解決

valid名前があるときに次の正規表現が印刷されるのはなぜですかhdpworker01

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

私がやろうとしているのは、valid名前が一致した場合にのみ印刷することですworker[0-999]

予想結果の例:

  • のためname=worker01valid
  • 対象name=hdpworker01:出力なし

ベストアンサー1

デフォルトでは、正規表現は文字列の先頭または末尾に固定されません。これは、たとえばファイル名のグロービングパターンとは異なります。これは、式が与えられた文字列のどこにでも一致できることを意味します。

式を文字列の先頭に固定するには、次のようにします。

^worker[[:digit:]]

文字列の末尾にさらに固定して1〜3桁の数字を許可するには、次のようにします。

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

一致したいがworker10一致しないworker01worker003ゼロパディングのない数字)、次を使用します。

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

おすすめ記事