shell 连接日期时脚本奇怪的文件名

shell script weird file name when concatenate the date

我正在做一个简单的任务,将文件夹备份为 .tgz 格式。

这是我的脚本:

noww=$(date +'%m_%d_%Y') 
file_extension=".tgz" 
archive_file="pppbackup$noww$file_extension" 
echo "date:$noww" 
echo "start backing up to $archive_file"
sudo tar -zcvf $archive_file /opt/pppaddon

我拿到了文件,但是名字很奇怪。 执行 ls 命令,名称显示为“??”在末尾。 pppbackup04_22_2015.tgz?? 我不知道 google 这是什么意思。 我怎样才能解决这个问题?我也下载不了文件

问题编辑前

这一行:

archive_file="pppbackup$noww$file_extension" echo "date:$noww" 

会创建一个环境变量 $archive_file,只要执行 echo 命令(或覆盖其先前的值),仅此而已。 echo 完成后,下一行将执行,就好像您从未分配给 $archive_file.

分割线:

archive_file="pppbackup$noww$file_extension"
echo "date:$noww" 

您应该 运行 bash -x 下的 command/script 看看发生了什么。您还可以在分配行前后添加 echo "archive_file=[$archive_file]"。您可能会选择前一段时间创建的错误值。由于您的备份仅注明日期 - 它不包括时间戳 - 您可能是不久前无意中创建了该变量,并且之前没有注意到它是伪造的。

问题编辑后

如果在拆分故障线后问题仍然存在,运行修改bash -x下的脚本并将输出和错误输出通过管道传输到您首选的工具以制作不可打印的字符可见。在极端情况下,使用:

bash -x yourscript.sh 2>&1 | od -c

但任何使有趣的字符清晰可见的程序都可以。你可以找出 ?? 真正代表什么。然后我们可以更好地调试您看到的内容。