シェルスクリプトでtestコマンドの代わりに簡単に数値


testコマンド

bashで数値を比較するとき、普通はtestコマンドを使います。

しかしこのコマンドの比較オプションは全く直感的ではなくとてもわかりにくいです。

オプション 説明 補足
-eq 等しければ真 equal
-ne 等しくなければ真 not equal
-lt より小なら真 less than
-le 以下なら真 less than or equal
-gt より大なら真 greater than
-ge 以上なら真 greater than or equal

※引用: Bash の if 文(test文)のオプションを整理してみた

これを覚えるのははっきり言って面倒です。

他の言語のように<=>を使えないのでしょうか?

二重カッコを使う

Archisoのソースコードを読んでいて偶然見つけました。

a=1000
if (( a <= 1000 )); then
    echo "aは1000以下です。"
fi

こんな書き方ができるんです()
Bashで$(( a + 10 ))とするように変数に$は必要無いようです。

算術展開の一種なのかBashの独自構文なのか詳細はわからないです...
なので誰か詳しく知ってる方いたら教えてください。

追記

コメントで教えてもらいましたが、POSIXには無いBashやZshなどの独自機能なようです。
シェバンで#!/usr/bin/env bashを指定していれば問題ないと思いますが、組み込み環境などの特殊な場合は使わないほうが良さそうです。

hoge=200
if (( hoge == 200)); then
    echo "hogeは200です"
else
    echo "hogeは200ではありません"
fi

Dash上で実行するとエラーが出ました、正常な比較はできていませんね。