[[]]テストで二重引用符を使用するのはなぜですか?

[[]]テストで二重引用符を使用するのはなぜですか?

Bashスクリプトに2つの整数があるとします。

value1=5
value2=3

それでは、テストするときになぜ二重引用符を使用する必要がありますか?たとえば、

if [[ "$value1" -eq "$value2" ]]

なぜ以下を使用しないのですか?

if [[ $value1 -eq $value2 ]]

私にとって二重引用符は意味がありません。

ベストアンサー1

実際、ここでは引用符は必要ありません。これは、引用符のない変数を使用しても安全な数少ない場合の1つです。以下で確認できますset -x

$ var1=""
$ var2="3"
$ set -x
$ if [[ $var1 -eq $var2 ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!
$ if [[ "$var1" -eq "$var2" ]]; then echo "match!"; else echo "no match!"; fi
+ [[ '' -eq 3 ]]
+ echo 'no match!'
no match!

上記のように、引用されたテストバージョンと引用されていないテストバージョンはbashによってまったく同じ内容に解析されます。zsh私はこの演算子をサポートする他のシェルでも同じだと思います[[ ]]

これはいいえよりポータブルケース[ ]

$ if [ $var1 -eq $var2 ]; then echo "match!"; else echo "no match!"; fi
+ '[' -eq 3 ']'
sh: [: -eq: unary operator expected
+ echo 'no match!'
no match!

以前の構成とは異なり、この[ ]構成には[[ ]]参照が必要です。


引用が必要な時期と理由について詳しく学ぶのに役立ついくつかの便利なリンク:

おすすめ記事