KSH/BASHアレイの最大サイズ

KSH/BASHアレイの最大サイズ

kshとbashスクリプトの最大配列サイズは何ですか?

例:10個の要素からなる配列があるとします。配列の特定のインデックスが保持できる最大文字列数は何ですか?同じ配列の最大サイズはいくらですか?

私はUnixに初めて触れました。よくある質問のようですが、答えがなくてここに質問するようになりました。

答え1

i=0
while true; do
    a[$i]=foo
    i=$((i+1))
    printf "\r%d " $i
done

この簡単なスクリプトは私のシステム(Gnu / LinuxとSolaris)に表示されます。

  • ksh88サイズを(4095)に制限します2^12-1。 (subscript out of range)。一部の以前のバージョン(たとえば、HP-UXバージョン)はサイズを1023

  • ksh93配列サイズを2^22-1(4194303)に制限します.状況が異なる場合があります。

  • bash使用可能なデフォルトのメモリリソースによって指定されたもの以外は、ハードコーディングされた制限は適用されません。たとえば、bashは1.3 GB仮想メモリを使用してサイズの配列を保存します18074340

mksh注:遅すぎるループ(zsh、および.よりksh93100倍遅い)の実行を放棄しました。bash

答え2

配列サイズには最大制限はなく、メンバーを連続的にインデックス付けまたは割り当てる必要もありません。インデックス配列は整数参照(算術式を含む(シェル算術参照))を使用し、関連配列は任意の文字列を使用します。特に明記しない限り、インデックス配列インデックスは負でない整数でなければなりません。

http://www.gnu.org/software/bash/manual/html_node/Arrays.html

答え3

実装によって異なります。 「実装定義の制限」はkshに文書化されています。インデックス配列ksh88既存のシステムの制限は1023であり、ksh93実装に必要な最小制限は4095であるためです。したがって、これ以上の利用可能な制限があるとは予想できません! (特定のシステムに対してのみこれを実装する場合は、他の回答で提案されているようにシステムの制限をテストできます。)

関連情報