![系统范围内的参数计数限制是否适用于 shell 函数?](https://linux22.com/image/141965/%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E5%86%85%E7%9A%84%E5%8F%82%E6%95%B0%E8%AE%A1%E6%95%B0%E9%99%90%E5%88%B6%E6%98%AF%E5%90%A6%E9%80%82%E7%94%A8%E4%BA%8E%20shell%20%E5%87%BD%E6%95%B0%EF%BC%9F.png)
另一个问题find
询问s建立命令的限制-exec ... {} +
。在这里我想知道这些限制与 shell 的内部限制相比如何。它们是模仿系统限制还是独立的?这些是什么?
我是 Bash 用户,但如果只是出于好奇,我会学习任何 Unix 和 Linux shell。
答案1
系统范围内的参数计数限制是否适用于 shell 函数?
execve()
不,这是对进程用来执行不同可执行文件以替换当前可执行文件的系统调用的限制。这不适用于当前 shell 解释器在同一进程中解释的函数。这也不适用于内置实用程序。
execve()
在加载和启动新的可执行文件之前擦除进程的内存。函数和内置函数的全部意义在于不会发生这种情况,因此函数可以修改 shell 的变量和其他参数,因此它们通常会不是使用execve()
。
他们模仿系统限制吗
不。
或者他们是独立的?
是的。
这些是什么?
当前 shell 进程的资源限制允许的范围内。
这bash手册说:
数组的大小没有最大限制,也没有对成员进行连续索引或分配的要求。
这似乎适用,因为函数参数是内部 shell 数组(未传递给exec
内核函数)。
从历史上看,对数组索引有较低的限制,ksh88
但pdksh
对函数参数的数量没有限制。您只能直接在 Bourne shell 中访问$1
, ... $9
,但您仍然可以向函数传递任意数量的参数,例如使用 循环遍历所有参数,for arg do...
或者将它们传递给另一个函数或内置函数"$@"
。