Absolutt verdi av tallet

Jeg har en enkelt linje med tall atskilt med et mellomrom.

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

Jeg trenger at den trykte verdien skal være et absolutt tall

Jeg har en ny utgave jeg får. Formatet jeg prøver å få et absolutt tall. Ingenting jeg gjør fungerer. Jeg leste at

abs(){ number } 

burde gi meg dette, men det ser ikke ut til å virke. Også hvis det fungerer, hvor jobber du det inn i løkken?

Kommentarer

Svar

Hvis du multipliserer et hvilket som helst tall med -tegnet , genereres et positivt tall. Eller hvis du vil ha den absolutte verdien av tallet. Funksjonen for tegn er veldig enkel:

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

Den absolutte verdien er da:

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

Selvfølgelig er det mye lettere å bare fjerne det ledende negative tegnet (hvis det finnes), eller, for fullstendighet, et hvilket som helst + eller - tegn (hvis det finnes) med ledende mellomrom:

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

Svar

Hvis du har et negativt heltall, kan du behandle det som en streng og fjerne det ledende bindestrek

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *