を使用すると、$
前の文字が$
文字列の末尾に表示される必要があることがわかります。
a
しかし、変数が整数の場合、以下に提供されるテストの違いはわかりません。
[[ a =~ -?[0-9]+ ]]
[[ a =~ ^-?[0-9]+$ ]]
彼らは同じですか?
答え1
いいえ、表現が[0-9]+
異なります[0-9]+$
。最初は1つ以上の数字と一致します。どの場所でも文字列では、後者は次のようになります。ただ1つ以上の数値シーケンスと一致終わりひも。説明のために、このスクリプトを使用して最初の引数に対して式をテストします。
#!/bin/bash
a=$1
if [[ $a =~ -?[0-9]+ ]]; then
echo "match to first expression"
else
echo "no match to first expression"
fi
if [[ $a =~ ^-?[0-9]+$ ]]; then
echo "match to second expression"
else
echo "no match to second expression"
fi
結果は次のとおりです。
$ ./test.sh 12345
match to first expression
match to second expression
$ ./test.sh 12345AA
match to first expression
no match to second expression
答え2
いいえ。 2つの表現は異なります。
[[ a =~ -?[0-9]+ ]]
a に整数が含まれているかどうかをテストします。文字列のどこにでも存在できますが、問題ではありません。
しかし、
一方、[[ a =~ ^-?[0-9]+$ ]]
^はテスト文字列の始まりを表し、$は文字列の終わりを表すため、aが整数のみで構成されているか(最初の文字としてオプションで使用)テストされます。
これは、2番目の式では、文字列のどの位置でも数値以外の値が一致しないことを意味します。