【问题标题】:Dynamic variable names for an array in bashbash中数组的动态变量名
【发布时间】:2017-11-06 20:03:13
【问题描述】:

我有一个名为“循环”的数组。

对于“循环”中的每个元素,我想创建一个数组,其名称包含当前元素的文本。

然后我想遍历每个新数组并打印每个数组中的每个元素。


This post 似乎对变量有很好的解决方案,但我不知道如何使其适用于数组。


我的脚本

#!/bin/bash
loop=(
first
second
third
)

for word in "${loop[@]}"    
do
        declare "${word}_holder=( hello world )"
        var="${word}_holder"
        echo "$var"
        for i in "${!var}[@]"
        do
                echo "$i"
        done
done

电流输出

first_holder
( hello world )[@]
second_holder
( hello world )[@]
third_holder
( hello world )[@]

期望的输出

first_holder
hello
world
second_holder
hello
world
third_holder
hello
world

【问题讨论】:

    标签: arrays bash shell command-line terminal


    【解决方案1】:

    它并不漂亮,但它是一个开始:

    #!/bin/bash
    loop=(
    first
    second
    third
    )
    
    for word in "${loop[@]}"    
    do
        var=${word}_holder
        eval "declare -a ${var}"
        eval "${var}=( Hello World )"
        eval 'nEntries=${#'${var}'[@]}'
        echo ${var}
        for (( ii=0; ii<$nEntries; ii++ )); do
           cmd='echo ${'${var}'['$ii']}'
           eval ${cmd}
        done
    done
    

    【讨论】:

      【解决方案2】:
      for word in "${loop[@]}"; 
      do 
         name="${word}_holder";
         declare -a "$name"; 
         declare -n arr="$name";
         echo $name;
         arr=(hello world);
         arr_ref="$name[@]";
         for w in "${!arr_ref}";
         do 
            echo $w; 
         done; 
      done;                             
      
      first_holder                                                                                                                              
      hello                                                                                                                                     
      world                                                                                                                                     
      second_holder                                                                                                                             
      hello                                                                                                                                     
      world                                                                                                                                     
      third_holder                                                                                                                              
      hello                                                                                                                                     
      world     
      

      当然,如果您不打算引用动态生成的数组(first_holder 等),那么做所有这些都是没有意义的。

      【讨论】:

        猜你喜欢
        • 2018-07-22
        • 2013-05-09
        • 2022-11-24
        • 1970-01-01
        • 2014-07-12
        相关资源
        最近更新 更多