我有一行由空格分隔的数字。
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.