【问题标题】:Bash - Creating Arrays using loop counterBash - 使用循环计数器创建数组
【发布时间】:2012-02-08 13:43:48
【问题描述】:

我正在编写一个 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`)'

感谢您提供的任何帮助。

【问题讨论】:

    标签: regex arrays bash


    【解决方案1】:

    使用 eval 赋值给名称依赖于另一个变量的变量:

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

    请注意,如果文件的内容包含空格或其他分隔符,则需要嵌套双引号(带有适当的转义)。否则,shell 会将其中的一部分解释为要执行的命令。此外,您需要在 $k 中的变量名周围加上大括号,否则 shell 将查找变量名 k_array

    【讨论】:

    • 感谢您的回复。关于使用的文件的注释,这是示例代码,在我的实际脚本中,用于填充数组的文件对于每次迭代都是不同的。有一个用于指向文本文件的路径也取决于 $k。我尝试使用 eval 代码,但是它没有转义第一个 \ 并且循环没有正确终止。
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多