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)
每当我在 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)