4

这是一个后续问题

ksh 变量接受的最大字符数是多少?

我检查了我的环境,它只允许

#include <sys/limits.h>
$ cpp <<  HERE | tail -1
> #include <limits.h>
> ARG_MAX
> HERE
1048576

有没有办法增加这个?或任何替代品

 while read line;
   do
      #parse logic
   done < $filename

处理很长的线路?根据我正在解析的记录,它不会停留在 2M 字符行。

环境细节:

 AIX $ KSH Version M-11/16/88f 
4

1 回答 1

3

您可以编译 Linux 3.7.x 内核,并编辑其include/uapi/linux/limits.h文件以增加ARG_MAX 参数(到更大的 2 次方,例如 2097152)。但是,如果您想增加更多内存,您应该拥有大量 RAM(例如 8GBytes)。

实际限制与execve(2)相关。该手册页上有一段。

但是您可能可以避免使用巨大的 shell 变量(在 Unix 环境中)。您是否考虑使用其他工具(awk, python, perl....)来读取您的文件?它们的变量环境不是传递给 fork 程序的 shell 环境,因此它们可以有非常长的值的变量。也许ksh有一些内置的 ( unexport) 以避免将某些变量导出到 Unix 环境中。

于 2013-01-17T20:22:36.710 回答