シェルスクリプトでtestコマンドの代わりに簡単に数値
3195 ワード
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上で実行するとエラーが出ました、正常な比較はできていませんね。
Author And Source
この問題について(シェルスクリプトでtestコマンドの代わりに簡単に数値), 我々は、より多くの情報をここで見つけました https://qiita.com/Hayao0819/items/59b511bbdf00074aa94b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .