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