bash脚本zip文件名奇怪地解析

时间:2014-06-27 16:17:46

标签: linux bash parsing zip

我正在尝试将各种文件压缩在一起(其中一个包含的文件本身就是一个zip文件),并根据之前定义的一些bash变量命名生成的zip文件。 zip文件名中使用的变量之一是从config.h文件中的#define中解析出来的。我成功地使用正确的名称解析了.zip,但是当我尝试在稍微不同的情况下实现相同的zip脚本时,我得到了错误的zip名称。

在Windows资源管理器中,错误的zip名称类似于X1276N~E.ZIP 在linux中,zip出现时带有预期的名称,除了带有问号(我已经理解为某种占位符)。胃内foo-stuff-bar-9.1b?.zip

我当前的代码尝试压缩名为foo-stuff-bar-9.1b.zip的文件:

foo_name=$1
bar_name=$2
rev_number=$(grep define[[:space:]]*SOME_NUMBER $directory/config.h | awk '{print $3;}'| tr -d '/"')
archive_name="$foo_name"-stuff-"$bar_name"-9."$rev_number"
zip "$archive_name".zip file1 file2 backup1.zip file3

所以“foo_name”和“bar_name”是来自终端的字符串,当运行脚本时,“rev_number”正在从config.h中解析,我将它们全部格式化为“archive_name”,然后再使用它zip命令。

我尝试了各种引号和括号的变体,无论我尝试什么,我都会得到同样奇怪的名字。我不确定我的错误是在哪里引起的,因为我正在从许多来源解析。任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

Per Marc B的建议,我将字符串传送到xxd -b以逐字节查看每个字符。在抓取config.h文件时,好像我在$ archive_name的末尾意外解析了一个字符。

我能够通过tr -d "[:cntrl:]"管道我的字符串来删除任何会产生奇怪文件名的控制字符来解决这个问题。