Ok, das ist ein Hackerrank Problem (https://www.hackerrank.com/challenges/bash-tutorials---arithmetic-operations). Im Grunde ist die Eingabe ein arithmetischer Ausdruck und ich soll eine formatierte Antwort (3 Dezimalstellen) ausdrucken. Ich versuchte dies zuerstUnterschied zwischen printf% .3f und bc Rundungsverhalten
read exp
echo "scale = 3; $exp" | bc -l
Es bestanden mehrere Tests, aber nicht die erste.
5+50*3/20 + (19*2)/7
Die Antwort ist 17.929
, aber mein Code druckt 17.928
aus. Ich habe versucht, diesen Code stattdessen
read exp
printf "%.3f\n" `echo $exp | bc -l`
Hinweis: das Echo an Backticks sein soll, aber ich habe ‚‘ nicht mit Block Anführungszeichen zu verwirren. Alle Tests bestanden. Was ist der Unterschied?
Backticks sind nur für Code-Formatierung weniger als eine Zeile geeignet - für mehrzeilige Segmente verwenden Sie Einzug für Code-Formatierung (was der Javascript-Editor für Sie tun wird, wenn Sie auf die Schaltfläche Code klicken). –
... alternativ verwenden Sie '$ (...)' anstelle von '\' ... \ '' jedenfalls - es ist die moderne POSIX-Syntax und weniger verwirrend zu verschachteln. –
.... auch - 'echo" $ exp "| bc -l', nicht 'echo $ exp | bc -l'; Wenn Ihr Ausdruck Leerzeichen um das '*' herum enthält, hätten Sie ein sehr überraschendes Verhalten ohne die Anführungszeichen (und sogar ohne die Leerzeichen hätten Sie ein überraschendes Verhalten, wenn Ihre Shell die 'Nullglob'-Option aktiviert hätte). –