Bash - 使用循环计数器创建数组

时间:2012-02-08 13:43:49

标签: regex arrays bash

我正在编写一个bash脚本,我需要在for循环中创建数组,并在每次迭代时使用计数器中包含的字符串(数组元素)命名每个数组。

以下是代码:

myArray=( joe bob dave mark )


for i in "${myArray[@]}"
do
  "$k_array"=( `cat fileUsedToPopulate.txt` )
done

# echo to test if one of the arrays has been created and populated

for j in "${joe_array[@]}"
do
  echo $j
done

所需的结果是4个数组,joe_array bob_array等,每个数组都填充了该文件。

但是我还是没有找到逃避$ k的东西,以便在声明/填充它时附加到数组名称。

以下是我遇到的错误:

第30行:意外令牌`cat fileUsedToPopulate.txt附近的语法错误' 第30行:"$k_array"=( cat $ DIR / $ braDir / oem.txt`)'

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

使用eval分配名称取决于另一个变量的变量:

val=$(cat fileUsedToPopulate.txt)
for k in "${myArray[@]}"
do
  eval "${k}_array"="\"${val}\""
done

请注意,如果文件的内容包含空格或其他分隔符,则需要嵌套双引号(正确转义)。否则shell将把它的一部分解释为执行命令。此外,您需要在$k中围绕变量名称使用大括号,否则shell将查找变量名称k_array