在unix中减去两个变量

时间:2013-04-26 10:51:59

标签: shell unix aix

这是我在UNIX(AIX)上运行的脚本:

$MON date +"%m"
echo 'expr $MON - 2'

输出:

04
expr $MON - 2

我只想从当前月份中减去2并显示。

3 个答案:

答案 0 :(得分:2)

我意识到AIX上的默认shell是ksh的一些变体,它在输入库中没有与bash相同的缺陷,但它是某种东西如果你最终在另一个平台遇到这个问题,请记住。

如果这是您的输入:

$MON date +"%m"
echo 'expr $MON - 2'

然后你有几个问题。

  • $MON未设置,这会导致调用行date +"%m",这会产生输出04
  • echo命令不会执行expr命令,因为您使用了错误的滴答,导致输出expr $MON - 2

首先,要分配您执行VARIABLE=value的变量,在您的情况下,这应该是:

MON=`date +"%m"`

请勿在{{1​​}}标志之前或之后放置空格。

其次,要执行expr,您需要使用反引号(=

`

但是,对于大多数shell,您应该使用更现代版本的我想获得命令的结果,这是逻辑echo `expr $MON - 2` 。这些可以嵌入,这使得它们更容易理解(反引号需要转义,反引号越多,所需的转发越多,快速导致反斜杠 - palooza)。 对于bash,您需要确保将月份解释为基数为10的数字,否则一旦您点击8月,代码将停止工作:

要强制将数字解释为基数为10的数字,请在其前面加上$(command)

10#

示例:

MON=10#$(date +"%m")
echo $(($MON-2))

答案 1 :(得分:1)

试试这个:

MON=$(date +"%m")
echo $(($MON-2))

您不需要使用expr,因为bash也可以执行简单的算术。

如果您的shell不支持算术表达式,请使用expr

expr $MON - 2 

在这两种情况下,您都会得到2作为输出。

答案 2 :(得分:1)

另一种选择:如果你想在1月或2月看到11或12,让GNU date做算术:

date -d "-2 months" +%m