Ik heb een enkele regel met getallen gescheiden door een spatie.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Ik wil dat de afgedrukte waarde een absoluut getal is
Ik krijg nog een probleem. Het formaat dat ik probeer een absoluut getal te krijgen. Niets wat ik doe, is werken. Ik heb gelezen dat
abs(){ number }
me dit zou moeten geven, maar het lijkt niet te werken. Ook als dat werkt, waar werk je dat dan in de lus?
Reacties
Antwoord
Door een willekeurig getal te vermenigvuldigen met het -teken wordt een positief getal gegenereerd. Of, als u wilt, de absolute waarde van het getal. De functie voor teken is heel eenvoudig:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
De absolute waarde is dan:
echo "$(( x * $(sign "$x") ))"
Het is natuurlijk een stuk eenvoudiger om gewoon het negatieve voorloopteken te verwijderen (als het bestaat), of, voor de volledigheid, een +
of -
teken (als het bestaat) met voorloopspaties:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Antwoord
Als je “een negatief geheel getal hebt, kun je het behandelen als een string en het voorloopstreepje verwijderen
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) eenabs()
rekenkundige functie hebben. Daarecho "$(( abs(-12) ))"
zal12
uitvoeren.