Tenho uma única linha de números separados por um espaço.
read var sum=0 for x in $var; do ... #add numbers together $((sum += x)) done
Preciso que o valor impresso seja um número absoluto
Tenho mais um problema que estou recebendo. O formato que estou tentando obter é um número absoluto. Nada do que estou fazendo está funcionando. Eu li que
abs(){ number }
deveria me dar isso, mas não parece estar funcionando. Além disso, se funcionar, onde você coloca isso no loop?
Comentários
Resposta
Multiplicar qualquer número por seu sinal irá gerar um número positivo. Ou, se você deseja o valor absoluto do número. A função do sinal é muito simples:
sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }
O valor absoluto é então:
echo "$(( x * $(sign "$x") ))"
Obviamente, é muito mais fácil apenas remover o sinal negativo inicial (se houver) ou, para ser completo, qualquer +
ou -
sinal (se existir) com quaisquer espaços à esquerda:
echo "${x##*[+-]}" # assuming x is an integer valid in the shell.
Resposta
Se você tiver um número inteiro negativo, pode tratá-lo como uma string e remover o traço inicial
x=-5 echo ${x#-}. # "5"
zmodload zsh/mathfunc
) têm umaabs()
função aritmética. Lá,echo "$(( abs(-12) ))"
produzirá12
.