变量赋值左侧的参数替换 - BASH和数组

时间:2013-05-10 20:33:17

标签: arrays bash variable-assignment variable-subsitution

我正在处理一些文件夹,每个文件夹代表一本书的页面。例如。 “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

1 个答案:

答案 0 :(得分:1)

我能够使用eval使其工作。

顺便说一句,您不需要运行sed

#! /bin/bash

for j in */; do
        j=$(basename "$j")
        vol_name=${j%-*}
        page_name=${j#*-}
        eval "$vol_name+=('$page_name')"
done    
echo ${Iliad[@]}