これはperlとかphpにあったりします。そんでcshにもあるのですが・・・
なぜかcshのforeach文に指定できる配列数の上限は997なのです
この997配列がMAXというのはOSやハードウェアの仕様によらずに、どの環境でも同じでした。
つまりcshの言語仕様ってことらしい。なぜ??なんでだろーなんでだろー
いろいろなシェル(一部perlで検証してみた)
イナバの物置風にforeachの捌ける配列MAXを探す
※スクリプト中に使われるファイル(list.txt,list2.txt)は複数行あるテキストファイルです。このファイルに例えば3行あれば3個の配列を用意します(空行は除く)。
つまりcshが997が限界なのかを検証するには997行のファイルと998行のファイルを用意すればいいのです。
まずはbash 全然平気
#!/bin/bash
array=(`cat list.txt`)
for line in ${array[@]}
do
echo $line
done
echo "やっぱりbash ${#array[@]} 人のっても大丈夫"
続いてzsh まあbashの強化版だし平気みたい
#!/usr/bin/zsh
array=(`cat list.txt`)
for line in ${array[@]}
do
echo $line
done
echo "やっぱりzsh ${#array[@]} 人のっても大丈夫"
cshとは違うのだよcshとは みたいな感じで余裕でクリア
#!/bin/tcsh
set array=`cat list.txt`
foreach i ($array)
echo $i
end
echo "やっぱりtcsh ${#array} 人乗っても大丈夫"
流石perlだどんな配列でもなんとも無いぜ!
#!/usr/bin/perl
open (FH,"list.txt");
@array=<FH>;
foreach (@array) {
print;
}
print "やっぱりperl ",$#array+1,"人乗っても大丈夫\n";
close FH;
この入力ファイルが997行以上あると・・・・
ちょおまwwwwみたいな感じで駄目 csh終わったな・・・
#!/bin/csh
set array=`cat list2.txt`
foreach i ($array)
echo $i
end
echo "やっぱりcsh ${#array} 人乗っても大丈夫"