以下のようにシェルでコマンドを実行すると、expr: non-integer argument
エラーが返されます。誰かが私にこれを説明してもらえますか?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
これらの変数はシェル変数です。それらを別のプログラムへのパラメータとして展開するには(すなわちexpr
)、$
プレフィックスを使う必要があります。
expr $x / $y
それが文句を言ったのは、それがあなたがアルファベット文字を操作しようとしていると思ったからです(すなわち非整数)
Bashシェルを使用している場合は、式構文を使用して同じ結果を得ることができます。
echo $((x / y))
または
z=$((x / y))
echo $z
私はそれがすでに他のスレッドで言及されていたと思います:
calc(){ awk "BEGIN { print "$*" }"; }
それならあなたは単にタイプすることができます:
calc 7.5/3.2
2.34375
あなたの場合はそれでしょう:
x=20; y=3;
calc $x/$y
あるいは、必要に応じて、これを別のスクリプトとして追加して$ PATHで使用できるようにします。そうすれば、常にローカルのシェルで使用できます。
#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
どうしてletを使わないの?私はそれがずっと簡単だと思います。これはあなたが役に立つと思うかもしれない例です:
start=`date +%s`
# ... do something that takes a while ...
sleep 71
end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds