0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-13

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上で実行するとエラーが出ました、正常な比較はできていませんね。

image.png

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?