1

我正在处理一些文件夹,每个文件夹代表一本书的一页。例如,“Iliad-001”将是 Book=Iliad,Page=001。

我想遍历所有文件夹,为每本书创建一个数组,并为找到的每一页向该数组添加一个条目,这样我就可以echo ${Iliad[@]}在我的脚本结束时,它会给我一个很好的列表它找到的页面。

我遇到的问题是将值添加到具有动态名称的数组中。这是我认为直观的代码(但显然不正确):

for j in */; do
        vol_name=$(basename "$j" | sed 's/\(.*\)-[0-9]*/\1/')
        page_name=$(basename "$j" | sed 's/.*-\([0-9]*\)/\1/')
        $vol_name+=( "$page_name" )
done    

这将返回:

syntax error near unexpected token `"$page_name"'

如果我将变量分配更改为此,$vol_name+="( "$page_name" )"我会更接近一点:

Iliad+=( 001 ): command not found
4

2 回答 2

1

I was able to make it work using eval.

BTW, you do not need to run sed.

#! /bin/bash

for j in */; do
        j=$(basename "$j")
        vol_name=${j%-*}
        page_name=${j#*-}
        eval "$vol_name+=('$page_name')"
done    
echo ${Iliad[@]}
于 2013-05-10T21:02:00.107 回答
0

尝试这个

declare $vol_name+=( "$page_name" )
于 2013-05-10T20:45:04.630 回答