Ich habe eine einzelne durch ein Leerzeichen getrennte Zahlenreihe.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Der gedruckte Wert muss eine absolute Zahl sein.
Ich habe noch ein Problem. Das Format, das ich versuche, eine absolute Zahl zu erhalten. Nichts, was ich tue, funktioniert. Ich habe gelesen, dass
abs(){ number }
mir dies geben sollte, aber es scheint nicht zu funktionieren. Auch wenn das funktioniert, wo arbeiten Sie das in die Schleife?
Kommentare
- Siehe auch unix.stackexchange.com/q/220588/117549
- Beachten Sie, dass ksh93 und zsh (nach
zmodload zsh/mathfunc
) eineabs()
arithmetische Funktion haben. Dortecho "$(( abs(-12) ))"
gibt12
aus.
Antwort
Multiplizieren einer beliebigen Zahl mit dem Zeichen antworten, wird eine positive Zahl generiert. Oder, wenn Sie den absoluten Wert angeben Die Funktion für das Vorzeichen ist sehr einfach:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
Der absolute Wert lautet dann:
echo "$(( x * $(sign "$x") ))"
Natürlich ist es viel einfacher, nur das führende negative Vorzeichen (falls vorhanden) oder der Vollständigkeit halber jedes +
oder zu entfernen -
-Zeichen (falls vorhanden) mit führenden Leerzeichen:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Antwort
Wenn Sie eine negative Ganzzahl haben, können Sie diese als Zeichenfolge behandeln und den führenden Bindestrich entfernen.
x=-5 echo ${x#-}. # "5"