我们如何从shell中的整数中删除负号?
说diff=-234
;我们如何制作diff=234
?
我试过
if [ $diff -lt 0 ]
then
diff=$(expr $diff \* -1)
fi
但这不起作用。
答案 0 :(得分:3)
您可以根据需要将值视为字符串或数字。如果将其视为字符串,则不必进行数值运算:
diff=-234
if [ "$diff" -lt 0 ]
then diff=${diff#-}
fi
echo "$diff"
您也可以使用expr
,但这会调用外部进程而不是在shell中执行:
diff=-234
if [ "$diff" -lt 0 ]
then diff=$(expr "$diff" : '^-\(.*\)')
fi
echo "$diff"
然后你可以用许多不同的方式对它进行数字处理,包括:
diff=-234
if [ "$diff" -lt 0 ]
then ((diff *= -1))
fi
echo "$diff"
您还可以修改条件:
diff=-234
[ "$diff" -lt 0 ] && ((diff *= -1))
echo "$diff"
diff=-234
[[ "$diff" < 0 ]] && ((diff *= -1))
echo "$diff"
diff=-234
(("$diff" < 0)) && ((diff *= -1))
echo "$diff"
diff=-234
((diff < 0)) && ((diff *= -1))
echo "$diff"
diff=-234
[[ "$diff" < 0 ]] && diff=${diff#-}
echo "$diff"
等等。
答案 1 :(得分:1)
使用shell算术语法确定数字是否为负数,如果是,则乘以-1
得到正值。
if ((diff < 0)); then let diff*=-1; fi
示例:
$ diff=-42
$ if ((diff < 0)); then let diff*=-1; fi
$ echo $diff
42