【问题标题】:Shell scripting removing negative integerShell脚本删除负整数
【发布时间】:2013-08-12 10:24:44
【问题描述】:

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

diff=-234;我们怎样才能使diff=234

我试过了

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

但这不起作用。

【问题讨论】:

  • 我刚刚测试了您的代码,因为它看起来对我来说是正确的,并且工作正常。所以你的问题一定在你脚本的其他地方。

标签: shell variables scripting


【解决方案1】:

您可以根据需要将值视为字符串或数字。如果你把它当成一个字符串,你就不用做数值运算了:

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"

等等。

【讨论】:

    【解决方案2】:

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

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

    例子:

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

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 2015-10-06
      • 2018-06-23
      • 2019-02-03
      • 1970-01-01
      • 2014-02-20
      相关资源
      最近更新 更多