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"
zmodload zsh/mathfunc
) har enabs()
aritmetisk funksjon. Der,echo "$(( abs(-12) ))"
sender ut12
.