bash中的多个列表和多个文件类型 问题

bash中的多个列表和多个文件类型 问题,bash,list,nested-loops,nested-lists,Bash,List,Nested Loops,Nested Lists,存在一个数据处理问题,即对不同的文件执行一系列操作。但是,在处理过程中,不同类别的文件需要专门化。处理步骤漫长而繁琐,目标是创建和维护单个循环。我试图组成一个子列表的主列表,该列表与列表中元素的特定操作相关联 示意图示例 问题的一个最小版本如下。文件类可以用后缀标记 代表性输入数据 期望的行动 伪码 loop over master list first sublist foo create file names: a.png b.png c.png second

存在一个数据处理问题,即对不同的文件执行一系列操作。但是,在处理过程中,不同类别的文件需要专门化。处理步骤漫长而繁琐,目标是创建和维护单个循环。我试图组成一个子列表的主列表,该列表与列表中元素的特定操作相关联

示意图示例 问题的一个最小版本如下。文件类可以用后缀标记

代表性输入数据 期望的行动 伪码

loop over master list
    first sublist foo
        create file names: a.png b.png c.png
    second sublist bar
        create file names: alpha.svg beta.svg chi.svg
额外学分 嵌套计数器会很好,因为列表很长。例如chi.svg将是步骤2.3

使用nameref、eval或indirection来模拟嵌套数组

名称参考: foo=abc bar=α-β-chi 数组=foo-bar 后缀=.png.svg 声明-n arr 设i=0 对于${arrays[@]}中的arr;做 对于${arr[@]}中的元素;做 echo${elem}${suffix[i]} 完成 让我++ 完成 这将arr声明为nameref。当您操作arr时,实际上是在操作由arr值指定的变量

您可以为内环添加一个计数器,让j=0,让j++,或者执行以下操作:

for (( i = 0; i < ${#arrays[@]}; i++ )); do
    declare -n arr="${arrays[i]}"
    for (( j = 0; j < ${#arr[@]}; j++ )); do
        echo "${arr[j]}${suffix[i]}"
    done
done
这计算字符串arr=\${foo[@]},该字符串使用foo的元素创建数组arr

间接: foo=abc bar=α-β-γ 数组='foo[@]''条[@]' 后缀=.png.svg 设i=0 对于${arrays[@]}中的arr;做 对于${!arr}中的元素;做 echo${elem}${suffix[i]} 完成 让我++ 完成 ${!arr}引用了数组foo或bar,但我们无法对其进行索引或获取其长度,或者我是否遗漏了什么?。因此,我们不能使用j=0。。。在这里


搜索nameref、eval和indirection的相关文档。

这看起来像python。包括一个。@oguz ismail:如果我能做到这一点,就没有必要问这个问题。请看,这太宽泛了。出色的答案和极好的解释。比较不同的选择使这个答案成为社区的极好资源。
for (( i = 0; i < ${#arrays[@]}; i++ )); do
    declare -n arr="${arrays[i]}"
    for (( j = 0; j < ${#arr[@]}; j++ )); do
        echo "${arr[j]}${suffix[i]}"
    done
done