数的绝对值

数的绝对值

我有一行由空格分隔的数字。

read var
sum=0
for x in $var; do ...
    #add numbers together
    $((sum += x))
done 

我需要打印的值是一个绝对数字

我还遇到了一个问题。我试图获取绝对数字的格式。我所做的一切都不起作用。我读到了

abs(){ 
    number
} 

应该给我这个,但它似乎不起作用。另外,如果这确实有效,那么您在哪里将其放入循环中?

答案1

如果您有一个负整数,您可以将其视为字符串并删除前导破折号

x=-5
echo ${x#-}   # "5"

x=5
echo ${x#-}   # "5"

答案2

将任何数字乘以其符号将产生一个正数。或者,如果你想知道数字的绝对值。 Sign 的函数非常简单:

sign () { echo "$(( $1 < 0 ? -1 : 1 ))"; }

那么绝对值就是:

echo "$(( x * $(sign "$x") ))"

当然,删除前导负号(如果存在)要容易得多,或者为了完整起见,删除任何带有任何前导空格的+-符号(如果存在):

echo "${x##*[+-]}"   # assuming x is an integer valid in the shell.

相关内容