shell - unix中两个变量相减

标签 shell unix aix

这是我在 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/

相关文章:

Ruby:检查连通性

javascript - 如何从命令行访问 Node.js 服务器

php - 无法打开流 : Permission denied error on Jenkins job

linux - 如何使用 ps -u UserName 使输出仅显示 CMD

java - 获取核心文件

shell - 是否可以打印用于重定向 STDERR 的文件?

php - 通过浏览器从 php 脚本调用 svn 更新不起作用

java - 使用 shell 文件运行 jar 并指定类路径和属性文件路径

shell - 在 shell 脚本中查找处理器/CPU 数量的可移植方法?

linux - 如何解决 AIX tar 命令套接字错误?