Absolut værdi af tallet

Jeg har en enkelt linje med tal adskilt af et mellemrum.

read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done 

Jeg har brug for den trykte værdi for at være et absolut tal

Jeg har endnu et nummer, jeg får. Det format, jeg prøver på at få et absolut tal. Intet jeg laver fungerer. Jeg læste, at

abs(){ number } 

burde give mig dette, men det ser ikke ud til at virke. Også hvis det fungerer, hvor arbejder du det så i løkken?

Kommentarer

Svar

Ved at multiplicere ethvert tal med dets tegn genereres et positivt tal. Eller hvis du vil have den absolutte værdi af funktionen. Tegnfunktionen er meget enkel:

sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; } 

Den absolutte værdi er så:

echo "$(( x * $(sign "$x") ))" 

Det er selvfølgelig meget nemmere at bare fjerne det førende negative tegn (hvis det findes) eller, for fuldstændighed, ethvert + eller - tegn (hvis det findes) med eventuelle mellemrum:

echo "${x##*[+-]}" # assuming x is an integer valid in the shell. 

Svar

Hvis du har et negativt heltal, kan du behandle det som en streng og fjerne det førende streger

x=-5 echo ${x#-}. # "5" 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *