Valor absoluto del número

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

  • Consulte también unix.stackexchange.com/q/220588/117549
  • Tenga en cuenta que ksh93 y zsh (después de zmodload zsh/mathfunc) tienen una abs() función aritmética. Allí, echo "$(( abs(-12) ))" generará 12.

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" 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *