Valor absoluto do número

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" 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *