2014-09-05 85 views
0

如果有人能请让我知道一个UNIX变量可以采用的总长度是多少。 我有一个名为文件列表变量,我想保存这样的内容:UNIX中变量的长度

文件清单=路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称.....无限

+1

哪个外壳?我假设BASH? – Joe 2014-09-05 08:15:58

+0

你最好使用一个文件来存储它。无论如何你必须管理这些数据。我不真诚地知道,但我确定这是一个更好的方式做到这一点 – wonderwhy 2014-09-05 08:16:20

+0

好的...我需要这个,因为我想稍后做scp $ filelist id @remotohost:path – user3905438 2014-09-05 08:17:57

回答

2

有两个限制。第一个是在壳内。我想bash不会限制其变量,真正的限制是可用资源(如果malloc失败)。

更重要的一个(与您的scp $filelist [email protected]:path案例相关)是当您使用该变量时,例如,执行一些程序。然后调用execve(2),它可能会失败,因为整个程序参数占用太多的内存。阅读有关的参数大小和环境手册页部分限制:

对参数的大小和环境

Most UNIX implementations impose some limit on the total size of the 
    command-line argument (argv) and environment (envp) strings that may 
    be passed to a new program. POSIX.1 allows an implementation to 
    advertise this limit using the ARG_MAX constant (either defined in 
    <limits.h> or available at run time using the call 
    sysconf(_SC_ARG_MAX)). 

实际上限制了execve限制是显著(如128K字节的默认)。编辑某些内核头文件后,我经常编译自己的内核以提高该限制(例如,达到1Mbyte)。

请注意,一个变量是export -ed在bash进入(未来分叉进程的)环境受上述限制。

顺便说一句,你可以通过其他方式传输文件(rsyncgit等)。