GNU Coreutil Date(在 CLI 中输出数字但在 bash 脚本中不输出)

GNU Coreutil Date (outputs numbers in CLI but not in bash script)

每当我在 bash CLI 中 运行 命令时,我都会得到正确的输出

date +%Y%-m%d%j%M%S
202111063103528

但是,当我在 bash 脚本中 运行 时,我没有得到可以在以后的变量中使用的简单数字。我最终想用它来备份我生成的旧 CSV 文件。例如

#Doesn't print out correct date
DATE='date +%Y%-m%d%j%M%S'
echo $DATE

# Ultimately, wanting to feed that $DATE string here 
if [ -f "$CSV_OUTFILE" ]; then
          echo "CSV file already exists. Renaming $CSV_OUTFILE to $CSV_OUTFILE.$DATE"
          mv $CSV_OUTFILE $CSV_OUTFILE.$DATE
          exit 1
fi

对我做错了什么有什么建议吗?

您已将字符串 date +%Y%-m%d%j%M%S 分配给 $DATE。它包含一个 space,因此在 mv 中使用不带双引号的 $DATE 会将其扩展为两个词。

使用反引号代替引号来捕获命令的输出:

DATE=`date +%Y%-m%d%j%M%S`

或者,更好的是,使用 $(...) 语法(更好,因为它可以嵌套):

DATE=$(date +%Y%-m%d%j%M%S)