web-dev-qa-db-ja.com

bashと算術比較:二重引用符かどうか?

bashで2つの整数を比較する場合、二重引用符を付ける必要がありますか?公式文書で http://tldp.org/LDP/abs/html/comparison-ops.html 毎回二重引用符が表示されるはずだと読むことができます...しかし、の違いは何ですか次の例:

[ "$VAR" -eq "1" ]
[ $VAR -eq "1" ]
[ "$VAR" -eq 1 ]
[ $VAR -eq 1 ]

興味があるので、/ etc /init.dにあるUbuntuinitスクリプトを見てみました。少なくとも["$ VAR" -eq "1"]と[$ VAR -eq]には、算術比較の多くの使用法があります。 1]が使用されています...しかし、それを行う公式の方法が何であるかを実際に「知っている」人はいないようです。

ありがとう!

8
Martin

$VARが空または未設定である可能性がある場合は、引用符で囲む必要があります(したがって、おそらく常に引用符で囲む必要があります)。

引用せずに空の場合、ステートメントの結果は次のようになります。

[ -eq 1 ]

これは構文エラーです。ただし、1を引用しても何も得られません。

bash条件式[[ ... ]]のあるもの)も見てください。これは、癖の少ない、より「モダンな」バージョンのテストコマンドです。)

4
Mat

算術比較が必要な場合は、算術条件付き構文を使用します(文書化 ここ ):

(( VAR == 1 ))
3
glenn jackman