常にfalseを与える除算を伴うシェルスクリプトの比較

私はシェルbashスクリプトで非常に単純な比較を書いていますが、正しいことはありません:

カウント= 0

if [ expr $count/4 = 0 ];
then
  echo "yes";
else
  echo "no";
fi

いつもいいえ?

1
私はここにいくつかのことを書いています: stackoverflow.com/questions/ 7918098 /…
追加された 著者 olidev,
ただ好奇心から、ここで何をしようとしていますか? $ count/4 == 0であるかどうかを確認すると、$ countが4より小さい場合にだけ表示されます。なぜ[$ count -lt 4] ならを使わないのですか?
追加された 著者 Chriszuma,

3 答え

あなたがexprプログラムを呼び出すには、実際に呼び出す必要があります:

if [ $(expr $count/4) = 0 ]; then echo "yes"; else echo "no"; fi

しかし、bashはそれを社内で行うことができます:

if (( $count/4 == 0 )); then echo "yes"; else echo "no"; fi
5
追加された
実際、(())では $ は必要ありません。これは次のようになります。 if((count/4 == 0));エコー "はい"。 else echo "no"; fi
追加された 著者 Lee Netherton,
うわー、私はbashがそれを行うことができるか分からなかった。編集:それは少し時間がかかったが、私はガイドを見つけた。私に新しいトリックを教えてくれてありがとう。 tldp.org/LDP/abs/html/dblparens.html
追加された 著者 Chriszuma,

コマンド置換$())を使用する必要があります。 またはバッククック)を使用して eval の式を評価します。また、整数比較には -eq を使用してください:

if [ $(expr $count/4) -eq 0 ];
then
  echo "yes";
else
  echo "no";
fi
3
追加された
はい、 == の文字列比較は通常動作しますが、if文が[$(expr $ count/4)== 00] の場合に意図しない結果をもたらす。目的に合った比較演算子を使用することをお勧めします。
追加された 著者 Lee Netherton,
+1しますが、 = のままにしておくことができます。
追加された 著者 Michael Krelin - hacker,
整数の場合、文字列の等価性と整数の等価性は同じなので、 -eq または == を使用できます。
追加された 著者 Chriszuma,

これはどう

[[ count/4 -eq 0 ]] && echo 'yes' || echo 'no'
0
追加された