感激如果有人可以请让我知道UNIX变量的总长度是多少。 我有一个名为filelist的变量,我想保存这样的内容:
filelist = path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name path / name 路径/名称路径/名称路径/名称路径/名称路径/名称 路径/名称.....无穷大
答案 0 :(得分:2)
有两个限制。第一个是在shell内部。我想bash
不会限制很多变量,真正的限制是可用资源(如果malloc
失败)。
更重要的一个(与您的scp $filelist id@remotohost: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
中bash
的变量进入环境(未来的分叉进程),受上述限制。
顺便说一句,您可以通过其他方式传输文件(rsync
或git
等...)。