Ho ununica riga di numeri separati da uno spazio.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Ho bisogno che il valore stampato sia un numero assoluto
Ho un altro problema che sto riscontrando. Il formato che sto cercando di ottenere un numero assoluto. Niente di quello che sto facendo funziona. Ho letto che
abs(){ number }
dovrebbe darmi questo ma non sembra funzionare. Inoltre, se funziona, dove lo lavori nel ciclo?
Commenti
Risposta
Moltiplicando un numero qualsiasi per il suo segno verrà generato un numero positivo. Oppure, se si vuole il valore assoluto del numero. La funzione per il segno è molto semplice:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
Il valore assoluto è quindi:
echo "$(( x * $(sign "$x") ))"
Ovviamente, è molto più semplice rimuovere il segno negativo iniziale (se esiste) o, per completezza, qualsiasi +
o -
segno (se esiste) con spazi iniziali:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Risposta
Se hai un numero intero negativo, puoi trattarlo come una stringa e rimuovere il trattino iniziale
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) hanno una funzione aritmeticaabs()
. Lì,echo "$(( abs(-12) ))"
restituirà12
.