Absolute waarde van getal

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" 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *