1

我们如何从 shell 中的整数中删除负号?

diff=-234;我们怎么做diff=234

我试过了

if [ $diff -lt 0 ]
then
    diff=$(expr $diff \* -1)
fi

但这不起作用。

4

2 回答 2

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"

等等。

于 2013-08-12T11:00:50.357 回答
1

使用 shell 算术语法判断数字是否为负数,如果是,则乘以-1得到正数。

if ((diff < 0)); then let diff*=-1; fi

例子:

$ diff=-42
$ if ((diff < 0)); then let diff*=-1; fi
$ echo $diff 
42
于 2013-08-12T10:29:58.183 回答