bashの変数の容量を調べる

bashの変数の容量を調べよう。

一行だから1024とか2048とかを想像していたがそれはコマンドラインの長さだな。
大体いまどき一行の長さ制限している点で富豪じゃないといえるんだけどな。まあいいとして。

しらべてみた。

$ a=0123456789;b=;i=0;while :; do i=$((++i));b="$a$b"; if [ $((i*10)) = ${#b} ]; then if [ $((i%1000)) = 0 ]; then echo $((i*10));fi ; else echo "NG ${#b}" ;fi ;done
10000
20000
30000
40000
50000
60000
70000
^C

だんだん遅くなるが7万まで耐えてみた。65536以上いったのでとりあえずテキストファイルの中身をすべて叩き込んでも大丈夫だろうことは分かった。

ので実験してみた。

$ rm a.txt
$ for i in {1..100000};do echo -n 0123456789 >>a.txt  ;done
$ wc -c a.txt
1000000 a.txt
$ function bar(){ read a;echo ${#a}; }
$ cat a.txt | bar
1000000

すげえ。100万文字を格納した変数が作れるのか…おそろしい。

バイナリは用事があったとき調べることにする。