迭代数组内容时如何显示名称中带有空格的文件

时间:2012-07-23 22:48:14

标签: bash

我编写了一个简单的脚本,根据控制文件的内容检查zip文件的内容。

它运行良好,但是当我收到包含空格的文件时,它会失败并出现错误(实际上并不存在)。这是我的代码片段(name是为批量处理ZIP文件而创建的数组。)

echo "`date '+%m/%d/%y %T:'` List ZIP file contents."                                          
LIST_Array=(`/usr/bin/unzip -l $name | head -n -2|tail -n +4 | sort -r | awk '{print $4}'`)
LISTlen=${#LIST_Array[*]}
#iterate array to 1) build report and 2) look for control file
echo "`date '+%m/%d/%y %T:'` Iterate array to 1) build report and 2) look for control files."  
echo -e "`date '+%m/%d/%y %T:'` Files in ZIP file: $name\n"                                    >> $name.report.out
for (( i = 0 ; i < ${#LIST_Array[@]} ; i++ ))
do
    echo -e "${LIST_Array[$i]}"      >> $name.report.out
done

ZIP中的文件列表被捕获到$name.report.out中,然后与控制文件本身的内容进行比较。

如何正确显示带空格的文件?我虽然echo -e会有所帮助,但它似乎没有效果。

感谢。

1 个答案:

答案 0 :(得分:2)

因此,zip文件中包含一些文件,其中一些名称中包含空格。在这种情况下,当您列出文件时,awk'{print $ 4}'将不会捕获整个文件名。 read很好,因为它的最后一个参数捕获了该行的其余部分:

LIST_Array=()
while read length date time filename; do
    LIST_Array+=( "$filename" )
done < <(/usr/bin/unzip -qql "$name")