Absolutwert der Zahl

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) eine abs() arithmetische Funktion haben. Dort echo "$(( abs(-12) ))" gibt 12 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" 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.