2017-02-06 13 views
2

2週間後にスクリプトを開始しましたが、今はkornシェルスクリプトで連想配列を使用して3D配列を作成しようとしています。私はスクリプトを非常に長くすることなく考えることができるすべての可能な組み合わせを試しましたが、私は進歩を遂げることができません。私は連想配列内の個々の要素に対処しようとしており、私はそれを行うことができません。私は本当にこれに関する助けに感謝します。kornシェルの連想配列内の要素の要素へのアクセス方法

#!/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 
+1

「ksh」と「bash」にはかなりの違いがあるので、私はあなたの質問に「ksh」のタグを付け替えました。 (ここで最も重要なのは、 'bash'はネストされた配列を許可しないということです)。 – chepner

答えて

3

を。 の文字列があります。

#!/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 
+0

このスクリプトは実行されていません。http://www.shellcheck.net/にはエラーが表示されます。 上記の方法で連想配列を宣言することもできます。 "$ {array_of_array [$ INDEX] [@]}"の指示を教えてください – Albert

+2

あなたはどのバージョンの 'ksh'を使用していますか?これは 'ksh' 93u + 2012-08-01で私にとってうまくいきます。 'shellcheck'は' ksh'をサポートしていません。 – chepner

関連する問題