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"
zmodload zsh/mathfunc
) har enabs()
aritmetisk funktion. Där finnsecho "$(( abs(-12) ))"
matar ut12
.