我正在尝试加载和解析很大的文本文件。尽管加载不是问题,但是某些特定的行在一行上具有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)
后续问题:Is it possible to increase the maximum number of characters that ksh variable accepts?
任何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
AND只是可以支持的环境的整体大小。当处理命令行环境和程序名称后的“单词”时,单词的数量受到限制,而与整体大小无关。
某些Shell手册页的LIMITS部分可能显示max-bytes 200MB, max-args 2048
之类的内容。此信息可能在不同的部分中,它肯定具有不同的标签和我包含的不同值,或者可能根本不存在,因此上面的代码循环,因此请仔细查看一下,如果您找到此信息的来源,请为此问题添加答案,或更新此问题。
bash 4.4
std手册页似乎没有此信息,因此很难始终找到ksh
文档。检查您的man ksh
,并希望您能找到记录在案的限制。
IHTH