Wenn ich Befehle in meiner Shell wie folgt ausführe, wird ein expr: non-integer argument
-Fehler ausgegeben. Kann mir das bitte jemand erklären?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
Diese Variablen sind Shell-Variablen. Um sie als Parameter für ein anderes Programm ( dh expr
) zu erweitern, müssen Sie das Präfix $
verwenden:
expr $x / $y
Der Grund, warum es sich beschwert hat, ist der, dass er dachte, Sie wollten mit alphabetischen Zeichen arbeiten ( dh nicht-ganzzahlig)
Wenn Sie die Bash-Shell verwenden, können Sie mit der Ausdruckssyntax dasselbe Ergebnis erzielen:
echo $((x / y))
Oder:
z=$((x / y))
echo $z
Ich glaube, es wurde bereits in anderen Threads erwähnt:
calc(){ awk "BEGIN { print "$*" }"; }
dann kannst du einfach folgendes eingeben:
calc 7.5/3.2
2.34375
In Ihrem Fall wird es sein:
x=20; y=3;
calc $x/$y
wenn Sie möchten, fügen Sie dies als separates Skript hinzu und machen Sie es in $ PATH verfügbar, damit Sie es immer in Ihrer lokalen Shell haben:
#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
Warum nicht lassen lassen; Ich finde es viel einfacher ... Hier ein Beispiel, das du nützlich finden kannst:
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
Die Standard-Shell der meisten Linux-Distributionen ist Bash. In Bash müssen Variablen ein Dollarzeichen-Präfix für Parametererweiterung verwenden. Zum Beispiel:
x=20
y=5
expr $x / $y
Natürlich hat Bash auch arithmetische Operatoren und eine spezielle arithmetische Erweiterungssyntax , so dass die Binärdatei expr nicht als separater Prozess aufgerufen werden muss. Sie können die Shell die ganze Arbeit so machen lassen:
x=20; y=5
echo $((x / y))