私は与えられたパターンの始まりと終わりを表すために次の、とを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