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万文字を格納した変数が作れるのか…おそろしい。
バイナリは用事があったとき調べることにする。