Nachfolgend teilt die Ausgabe von date +%N
durch 1000000000
, rundet das Ergebnis auf zwei Dezimalstellen und weist das Ergebnis der Variablen T
.
printf -v T "%.2f" $(bc -l <<< "$(date +%N)/1000000000")
Wenn Sie nur das Zeug ausdrucken möchten,
bc <<< "scale=2; $(date +%N)/1000000000"
Wenn Sie nicht bc
mögen und wollen dc
verwenden (was ein bisschen leichter und viel lustiger verwenden, wie es ist Reverse Polish),
dc <<< "2 k $(date +%N) 1000000000/p"
Beachten Sie den Unterschied mit printf
erhalten Sie die führende 0
haben, nicht mit bc
und dc
. Es gibt einen weiteren Unterschied zwischen printf
und bc
(oder dc
): printf
Runden auf die nächste Zahl mit zwei Dezimalstellen, während bc
(oder dc
) Runden richtig auf zwei Dezimalstellen. Wenn Sie das letztere Verhalten wollen und auf eine Variable T
das Ergebnis zuordnen, können Sie verwenden beispielsweise
T=$(dc <<< "2 k $(date +%N) 1000000000/p")
oder, wenn Sie auch die führende 0
wollen:
T=0.$(dc <<< "2 k $(date +%N) 1000000000/p")
bash führt nur Integer-Arithmetik. Ihre Frage ist etwas irreführend, da Sie sich fragen, ob Sie eine Zahl auf zwei Dezimalstellen setzen möchten, und der Code, den Sie anzeigen, führt die Gleitkommaarithmetik eindeutig aus. –
Verwenden Sie [printf] [1] und huckepack auf lang getestetem Code. [1]: http://stackoverflow.com/questions/4377871/sprintf-in-shell-scripting –