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
、および.よりksh93
100倍遅い)の実行を放棄しました。bash
答え2
配列サイズには最大制限はなく、メンバーを連続的にインデックス付けまたは割り当てる必要もありません。インデックス配列は整数参照(算術式を含む(シェル算術参照))を使用し、関連配列は任意の文字列を使用します。特に明記しない限り、インデックス配列インデックスは負でない整数でなければなりません。
http://www.gnu.org/software/bash/manual/html_node/Arrays.html
答え3
実装によって異なります。 「実装定義の制限」はkshに文書化されています。インデックス配列。ksh88
既存のシステムの制限は1023であり、ksh93
実装に必要な最小制限は4095であるためです。したがって、これ以上の利用可能な制限があるとは予想できません! (特定のシステムに対してのみこれを実装する場合は、他の回答で提案されているようにシステムの制限をテストできます。)