“参数列表太长”限制是否适用于shell内置函数?
假设我想通过标准输入将非常长的字符串传递给命令:
string="a very long list of words ..."
我能说......么:
# not using double quotes around $string is deliberateprintf '%s\n' $string | cmd ...
要么
cmd <<< $string
甚至通过管道将其发送给xargs
:
printf '%s\n' $string | xargs cmd ...
有人可以澄清一下吗?
回答:
在bash中,操作系统强制执行的导致错误的命令行长度限制argument list too long
不适用于shell内置程序。
当execve()
系统调用返回错误代码时,将触发此错误E2BIG
。execve()
调用内置函数时不会涉及任何调用,因此不会发生错误。
因此,您建议的两个操作都是安全的:cmd <<<
"$string"写入$string
一个临时文件,该文件不需要作为argv元素(或环境变量,存储在相同的保留空间池中)传递;并且printf'%s\n' "$cmd"
发生在外壳内部,除非已将外壳的配置(与一样)进行了修改enable-nprintf
以使用外部printf
实现。
以上是 “参数列表太长”限制是否适用于shell内置函数? 的全部内容, 来源链接: utcz.com/qa/399112.html