Tengo una sola línea de números separados por un espacio.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Necesito que el valor impreso sea un número absoluto
Tengo un problema más. El formato que estoy tratando de obtener es un número absoluto. Nada de lo que estoy haciendo está funcionando. Leí que
abs(){ number }
debería darme esto pero no parece estar funcionando. Además, si eso funciona, ¿dónde lo trabajas en el ciclo?
Comentarios
Respuesta
Multiplicar cualquier número por su signo generará un número positivo. O, si lo desea, el valor absoluto La función del signo es muy simple:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
El valor absoluto es entonces:
echo "$(( x * $(sign "$x") ))"
Por supuesto, es mucho más fácil eliminar el signo negativo inicial (si existe) o, para completar, cualquier +
o -
signo (si existe) con espacios iniciales:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Responder
Si tienes un número entero negativo, puedes tratarlo como una cadena y quitar el guión inicial
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) tienen unaabs()
función aritmética. Allí,echo "$(( abs(-12) ))"
generará12
.