ハードなソフトの話

アクセスカウンタ

zoom RSS bash: = とか -eq とか

<<   作成日時 : 2017/08/10 08:39   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

きっかけ

先日、妙な動きをするスクリプトがあったので、修正した。

やはり、bash に慣れてない人から見ると下記の間違いは、気付きにくい

A=100

. . .なんらかの処理. . .

if [ $A=1 ]; then echo "same"; else echo "diff"; fi

実行結果は常に "same" と表示される。Aの値がなんであっても構わない。

理由はif文の中身で、$A と=と1がくっついているから。"$A=1"を値として評価しているため。

ただしくは、以下のように書く

if [ $A = 1 ]; then echo "same"; else echo "diff"; fi

=の前後にはスペースが必要

さてと、なんでこんなことになっているかというと、bashのif文は [ コマンドの戻り値を見ているから。

条件式は [ コマンドの引数なのだ。

$ A=0 

$ [ $A=1 ] ; echo $?

0

$ [ $A = 1 ] ; echo $?

1

※先頭の$はプロンプト

条件式が真のとき、戻り値は 0 、偽の場合は 1 になる。

数値は ?eq 、文字列は =

話を戻すと、数値を比較するときは、下記のように、-eq を使う

if [ $A -eq 1 ]; then echo "same"; else echo "diff"; fi

$Aに数値が入っている場合、 = と同じ動作になる。

しかし、何らかの理由で、 $A の値が数値と解釈できない文字列だったりすると結果は違う。

$ A=ABC

$ if [ $A -eq 1 ]; then echo "same"; else echo "diff"; fi

-bash: [: ABC: 整数の式が予期されます

diff

$ if [ $A = 1 ]; then echo "same"; else echo "diff"; fi

diff

-eq を使えば、エラーが表示されるので、予期せぬ状況に対応しやすい。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
bash: = とか -eq とか ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる