次のようにシェルでコマンドを実行すると、expr: non-integer argument
エラーが返されます。誰かがこれを私に説明してくれませんか?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
次のようにシェルでコマンドを実行すると、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
man bash
(プロンプトでq
出口まで)
私はすでに他のスレッドで言及されていたと思います:
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 $* }"; }
echo '1 / 3' | bc -l
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
別の簡単な例-1970年からの日数を計算します。
let days=$(date +%s)/86400
ほとんどのLinuxディストリビューションのデフォルトのシェルはBashです。Bashでは、変数はパラメーター展開にドル記号の接頭辞を使用する必要があります。例えば:
x=20
y=5
expr $x / $y
もちろん、Bashには算術演算子と特別な算術展開構文もあります。そのため、別個のプロセスとしてexprバイナリを呼び出す必要はありません。シェルに次のようにすべての作業を行わせることができます。
x=20; y=5
echo $((x / y))
expr
、2013年には推奨されません
としましょう
x=50
y=5
その後
z=$((x/y))
これは正しく動作します。しかし、caseステートメントで/演算子を使用したい場合は、解決できません。 その場合は、divやdevideなどの単純な文字列を使用します。コードを見る
/
シェルケースのラベルとしてうまく機能します。うまくいかないのは*
、それを引用せずに乗算に使用することです。それは、それが効果的にあなたの例では「devide」と「モジュロ」である場合、には、以下のすべての項目を上書きする原因となる
小数点以下の数値を取得するには、これを行うことができます:-
read num1 num2
div=`echo $num1 / $num2 |bc -l`
echo $div