【问题标题】:How to access elements of elements inside an associative array in korn shell如何访问 korn shell 中关联数组内元素的元素
【发布时间】:2017-06-23 13:21:46
【问题描述】:

两周前我已经开始编写脚本,现在我正在尝试使用 korn shell 脚本中的关联数组创建一个 3D 数组。我尝试了所有我能想到的可能的组合,而不会使脚本变得很长,但我无法取得任何进展。我正在尝试解决关联数组中的单个元素,但我无法做到这一点。我非常感谢您对此的任何帮助。

#!/usr/bin/ksh93

typeset -A array_of_array              #array_of_array is associative

array_of_array=([array_index]="A B C D E"
           [A]="AA AAA AAAA"
           [B]="BB BBB BBBB"
           [C]="CC CCC CCCC"
           [D]="DD DDD DDDD"
           [E]="EE EEE EEEE"
          )

print_fun(){
        for INDEX in ${array_of_array["array_index"]};
        do
                echo "$INDEX --->"

                echo ${${array_of_array[$INDEX]}[0]} #this is incorrect instrn

                for ITEMS in ${array_of_array[$INDEX]}
                do
                        echo $'\t\t\t'$ITEMS
                done
        done
}
print_fun

我正在尝试获得这样的输出:

A  --->  AA
         AAA
         AAAA

B  --->  BB
         BBB
         BBBB

C  --->  CC
         CCC
         CCCC

【问题讨论】:

  • 我已将您的问题重新标记为ksh,因为kshbash 有很多不同之处。 (此处最相关,bash 不允许嵌套数组)。

标签: arrays shell ksh


【解决方案1】:

你没有数组的数组;你有一个 strings 数组。

#!/usr/bin/ksh93

typeset -A array_of_array

# This associates another array with each key in the outer array
array_of_array=(
           [A]=(AA AAA AAAA)
           [B]=(BB BBB BBBB)
           [C]=(CC CCC CCCC)
           [D]=(DD DDD DDDD)
           [E]=(EE EEE EEEE)
          )

print_fun(){
        # Use this syntax for iterating over the keys of the outer array
        for INDEX in "${!array_of_array[@]}";
        do
                echo "$INDEX --->"

                # Use this syntax for accessing the elements
                # of the inner array associate with each key
                for ITEMS in "${array_of_array[$INDEX][@]}"
                do
                        echo $'\t\t\t'$ITEMS
                done
        done
}
print_fun

【讨论】:

  • 此脚本未运行,shellcheck.net 显示错误。我们也可以按照上面显示的方式声明一个关联数组。你能解释一下“${array_of_array[$INDEX][@]}”指令吗
  • 您使用的是哪个版本的ksh?这在ksh 93u+ 2012-08-01 中对我来说很好。 shellcheck 似乎不支持 ksh
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
相关资源
最近更新 更多