Bash变异神秘

1 linux bash

因此,在工作中我们使用会计系统,并在月底我们必须修改上个月的脚本并为打印出来的日志指定新名称.因为我很懒,宁愿花时间学习新东西而不是重复同样的任务,我决定编写脚本来为我做这一切并将其设置为cron工作.由于我刚刚开始这项工作而且我是Bash编程的新手,所以我决定稍微研究一下,找到我需要的所有工作并想出这个.

#!/bin/bash
month= $(echo $(date --date="last month" +%b))
year=$(echo $(date +%Y))
echo $(date --date="last month" +%Y-%m-%d)
echo $(date --date="yesterday" +%Y-%m-%d)
echo $(date --date="last month" +%b)
echo garuda-summary-$month$year.log;
Run Code Online (Sandbox Code Playgroud)

并打印出来

test.sh: line 2: Apr: command not found
2011-04-02
2011-05-01
Apr
computer-summary-2011.log
Run Code Online (Sandbox Code Playgroud)

所以我玩了一些,并让这个工作.但它很难看,我想知道它为什么以前不起作用.谢谢你

#!/bin/bash
month= $(echo $(date --date="last month" +%b))
year=$(echo $(date +%Y))
echo $(date --date="last month" +%Y-%m-%d)
echo $(date --date="yesterday" +%Y-%m-%d)
echo $(date --date="last month" +%b)
echo garuda-summary-$(date --date="last month" +%b)$year.log;
Run Code Online (Sandbox Code Playgroud)

tho*_*a88 5

test.sh: line 2: Apr: command not found
Run Code Online (Sandbox Code Playgroud)

是因为在分配到月份时"="后面有空格.这个空间使得bash认为4月($(echo $(date --date ="上个月"+%b)))的输出是你想要调用的命令.

这也将导致未在shell中设置月份,因为在与变量赋值相同的行上指定命令会告诉bash仅在调用指定命令时使用此变量值.