这是我在 UNIX(AIX) 上运行的脚本:
$MON date +"%m"
echo 'expr $MON - 2'
输出:
04
expr $MON - 2
我只想从当前月份中减去 2 并显示 .
我意识到默认 shell onAIX
是一些变体,ksh
它不会遭受与bash
输入库相同的缺陷,但如果您最终在另一个平台上遇到这种情况,请记住这一点。
如果这是您的输入:
$MON date +"%m"
echo 'expr $MON - 2'
那么你有几个问题。
$MON
未设置,这会导致调用 line date +"%m"
,这会给出输出04
expr $MON - 2
首先,要分配您所做的变量VARIABLE=value
,在您的情况下,这应该是:
MON=`date +"%m"`
不要在=
标志之前或之后放置空格。
其次,要执行 expr,您需要使用反引号(`
)
echo `expr $MON - 2`
但是,对于大多数 shell,您应该使用更现代的i want to get the result of a command,这就是逻辑$(command)
。这些可以嵌入,这使得它们更容易理解(反引号需要转义,反引号越多,需要的转义越多,这很快就会导致反斜杠-palooza)。对于 bash,您需要确保月份被解释为以 10 为基数的数字,否则一旦您到达八月,代码将停止工作:
要强制将数字解释为以 10 为底的数字,请在其前面加上10#
:
MON=10#$(date +"%m")
echo $(($MON-2))
例子:
bash-3.2$ month=07
bash-3.2$ echo $(($month + 1))
8
bash-3.2$ month=08
bash-3.2$ echo $(($month + 1))
bash: 08: value too great for base (error token is "08")
bash-3.2$ month=10#08
bash-3.2$ echo $(($month + 1))
9
尝试这个:
MON=$(date +"%m")
echo $(($MON-2))
您不需要使用expr
,因为 bash 也可以执行简单的算术运算。
如果您的 shell 不支持算术表达式,请使用expr
:
expr $MON - 2
在这两种情况下,您都会得到2
输出。
另一种选择:如果你想在一月或二月看到 11 或 12,让 GNUdate
做算术:
date -d "-2 months" +%m