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