Absolut värde för talet

Jag har en enda rad med siffror åtskilda av ett mellanslag.

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

Jag behöver det utskrivna värdet för att vara ett absolut tal

Jag har ytterligare ett nummer jag får. Det format jag försöker få ett absolut tal. Ingenting jag gör fungerar. Jag läste att

abs(){ number } 

borde ge mig detta men det verkar inte fungera. Också om det fungerar var jobbar du det i slingan?

Kommentarer

Svar

Att multiplicera valfritt tal med dess -tecken genererar ett positivt tal. Eller om du vill ha det absoluta värdet av siffran. Teckenfunktionen är mycket enkel:

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

Det absoluta värdet är då:

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

Naturligtvis är det mycket lättare att bara ta bort det ledande negativa tecknet (om det finns), eller, för fullständighet, någon + eller - -tecken (om det finns) med ledande mellanslag:

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

Svar

Om du har ett negativt heltal kan du behandla det som en sträng och ta bort det främsta strecket

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *