使用关联表按特定顺序处理文件的Bash脚本

时间:2014-09-06 15:14:46

标签: bash bash4

我处理一个使用部分文件名的bash脚本,以便正确处理。 下面是示例,其名称中包含“Catalog”的文件名,此文件与其名称中包含“product”的另一个文件成对。 有更多文件,需要按特定顺序处理,首先是“Catalog”文件,然后是名称中带有“ProductAttribute”的文件。

尝试不同的东西,但仍然无法正常工作。 这里我有一个关联文件名的哈希表

declare -A files 
files=( ["Catalog"]="product" ["ProductAttribute"]="attribute")

for i in "${!files[@]}"; do
    #list all files that contain "Catalog" & "ProductAttribute" in their filenames
    `/bin/ls -1 $SOURCE_DIR|/bin/grep -i "$i.*.xml"`;

    #once the files are found do something with them
    #if the file name is "Catalog*.xml" use "file-process-product.xml" to process it
    #if the file name is "ProductAttribute*.xml" use "file-process-attribute.xml" to process it
    /opt/test.sh /opt/conf/file-process-"${files[$i]}.xml" -Dfile=$SOURCE_DIR/$i

done

1 个答案:

答案 0 :(得分:2)

迭代关联数组的键没有固有的顺序:

$ declare -A files=( ["Catalog"]="product" ["ProductAttribute"]="attribute")
$ for key in "${!files[@]}"; do echo "$key: ${files[$key]}"; done 
ProductAttribute: attribute
Catalog: product

如果您想按特定顺序进行迭代,则需要对此负责:

$ declare -A files=( ["Catalog"]="product" ["ProductAttribute"]="attribute")
$ keys=( Catalog ProductAttribute )
$ for key in "${keys[@]}"; do echo "$key: ${files[$key]}"; done 
Catalog: product
ProductAttribute: attribute