- ベストアンサー
bash 条件式について
他人が作ったシェルスクリプトを見てるんですが、私自身初心者でいくつかよく分からないところがあります。 if文条件式(というよりtestの条件)の等号記号についてです。 if [ 条件式 ]; then で、 1)2つの文字列が等しいかどうか確認する際に用いる記号は = でいいんでしょうか? テキストとして見ている書籍には、”=”で書いてあるのですが、今動いているというスクリプトには”==”と記述してあります。 2)2つの数値が等しいかどうか確認する際に用いる記号は -eq でいいんでしょうか? 今動いているというスクリプトには”==”と記述してあります。”==”と記述してもインタプリタのほうで吸収してくれて動かしてくれているのでしょうか? 今、見ている書籍のサンプルソースにも、文字列比較で、"="と書いてあったり、"=="と書いてあったりとよく分かりません。条件式はif文、それ以外で違ったりしてくるんでしょうか? すみません。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
bashのマニュアルのURLを貼ります。 >if [ 条件式 ]; then で、 >1)2つの文字列が等しいかどうか確認する際に用いる記号は = でいいんでしょうか? = , == のどちらでもOKです。 = の方は、bashの元となったbshから使われている文字列比較演算子です。 == の方は、恐らくC言語で使われている演算子です。C言語では、=(代入), == (等価比較)を区別しています。 bashで == が = の代わりに使用できるようになったのは、bash Ver. 2.02以降です。 >2)2つの数値が等しいかどうか確認する際に用いる記号は -eq でいいんでしょうか? >今動いているというスクリプトには”==”と記述してあります。”==”と記述してもインタプリタのほうで吸収してくれて動かしてくれているのでしょうか? -eq, == どちらでもOKです。 上記と同様に、-eq はbshの頃から使われている数値比較演算子です。 == も使用できます。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
きっとCからの連想で==と書いてしまい、エラーになる人が続出するために機能追加されたんでしょうけど、/bin/sh で実行することも考えると = と書くように心がけたほうがいいでしょうね。 また、= も == も文字列としての比較なので、数字としての比較は -eq を使う必要があります。 [ 3 -eq 03 ] は真ですが、[ 3 == 03 ] は偽です。 >条件式はif文、それ以外で違ったりしてくるんでしょうか? これら演算子はシェルの組み込みコマンド test (別名 [ …… 昔は組み込みコマンドでなかったので外部コマンド /bin/test だった) の演算子なので、if で使おうが、 while で使おうが、それ以外で [ 3 -eq 03 ] && date のように使おうが同じです。
お礼
ありがとうございました。
お礼
ありがとうございました。 すっきりしました。