Bash 整数の比較

Bash 整数の比較

bashスタイルのガイドを読みながら、次のガイドを見つけました。

数学/整数演算

((...))と を使用します$((...))

a=5
b=4

# wrong
if [[ $a -gt $b ]]; then
    ...
fi

# right
if ((a > b)); then
    ...
fi

[[私が彼らの推論について尋ねたとき、数字を前のゼロと比較しようとすると、テストが窒息する可能性があると言われました。テストでは問題を再現できませんでした。

私の質問

((a > b))実際と間に機能的な違いはありますか[[ "$a" -gt "$b" ]]

答え1

私はそれを見ることができません。

[[ val1 < val2 ]]しかし、との間には1つの違いがあります(( val1 < val2 ))。前者は文字列比較です。

$ [[ 2 -lt 007 ]] && echo true || echo false
true
$ [[ 2 < 007 ]] && echo true || echo false
false
$ (( 2 < 007 )) && echo true || echo false
true

どちらの場合も、前にゼロがまだ問題になることはありますが、

$ (( 20 < 021 )) && echo true || echo false
false
$ [[ 20 -lt 021 ]] && echo true || echo false
false

これは、Cと同様に8進数を表示するためです。ただし、プレフィックスを付けることでこのようなことが発生するのを防ぎます10#。 (Bash リファレンス 6.5 シェル算術)

$ (( 10#20 < 10#021 )) && echo true || echo false
true

関連情報