什么是kshvariables接受的最大字符数?

我正在尝试加载和parsing一个非常大的文本文件。 虽然加载不是一个问题,但是在一行中有2908778个字符的特定行。

这在我的脚本中导致错误。

在下面的脚本中,我删除了所有的逻辑,并直接读取行。 我也删除了所有有效的行,只是在一个文本文件中留下了真正的长行。 运行时出现下面的错误:

$ dowhiledebug.sh dump.txt dowhiledebug.sh[6]: no space Script Ended dump.txt 

实际的脚本:

  #!/bin/sh filename=$1 count=1 if [ -f ${filename} ]; then echo "after then" while read line; do echo "$count" count=$((count+1)) done < $filename else echo "Could not open file $filename" fi echo "Script Ended $filename" 

更新(2013-01-17)

后续问题: 是否可以增加kshvariables接受的最大字符数?

任何shell的限制都是C命令行最大限制。 这里有一个小程序,可以为你从/usr/include/limits.h中提取信息:

 cpp <<HERE | tail -1 #include <limits.h> ARG_MAX HERE 

我给我(256 * 1024)或262144个字符。

如果未安装C编译器,则不起作用,但可能是类似的限制。

什么操作系统和版本的KSH? 你能echo ${.sh.version}并获得一个值吗? 如果是这样,请在上面的问题中包括。 或者这可能是pdksh?

假设一个现代的ksh支持(( i++ ))数学评估,下面是一个测试,可以让你进入大局:

 #100 char var var=1234578901234456789012345678901234567890123456789012345789012344567890123456789012345678901234567890 $ while (( i++ < 10000 )) ;do var=$var$var ; print "i=$i\t" ${#var} ; done i=1 200 i=2 400 i=3 800 i=4 1600 i=5 3200 i=6 6400 i=7 12800 i=8 25600 i=9 51200 i=10 102400 i=11 204800 i=12 409600 i=13 819200 i=14 1638400 i=15 3276800 i=16 6553600 i=17 13107200 i=18 26214400 i=19 52428800 i=20 104857600 i=21 209715200 i=22 419430400 -ksh: out of memory $ print -- ${.sh.version} Version JM 93t+ 2010-05-24 

IHTH