パターンマッチから^と$を削除

パターンマッチから^と$を削除

私は与えられたパターンの始まりと終わりを表すために次の、とをregex condition使います。^$

if [[ "$1" =~ ^[[:digit:]]+$ ]]; then

私も同等のものを書いたglob condition

if [[ "$1" == ^+([[:digit:]])$ ]]; then

とを使用していない人がいますが^$それを削除するのはなぜですか?

答え1

2番目の式は整数と一致しません。試してみましたか?

word=123
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

出力

no

これは、シェルグローブの場合、==文字列を一致させるためにパターン全体が必要であるため、^必要$がないためです。まず、リテラルを使用^して$値を囲んで再試行します。

word='^123$'
if [[ "$word" == ^+([[:digit:]])$ ]]; then echo yes; else echo no; fi

出力

yes

今どこにも言及されてい^ません$

word=123
if [[ "$word" == +([[:digit:]]) ]]; then echo yes; else echo no; fi

出力

yes

確実にするために、いくつかの文字列をチェックしてみましょう。

for word in 123 a123 123b 12c3
do
    if [[ "$word" == +([[:digit:]]) ]]
    then
        match=yes
    else
        match=no
    fi
    printf "%s:\t%s\n" "$word" "$match"
done

出力

123:    yes
a123:   no
123b:   no
12c3:   no

関連情報