这是我在 UNIX(AIX) 上运行的脚本:
$MON date +"%m"
echo 'expr $MON - 2'
输出:
04
expr $MON - 2
我只想从当前月份减去 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"`
请勿在 =
符号之前或之后添加空格。
其次,要执行expr,需要使用反引号(`
)
echo `expr $MON - 2`
但是,对于大多数 shell,您应该使用更现代的版本我想要获取命令的结果,即逻辑$(command)
。这些可以嵌入,这使得它们更容易理解(反引号需要转义,反引号越多,需要的转义就越多,这很快就会导致反斜杠帕卢萨)。
对于 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
关于shell - unix中两个变量相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16234695/