bash 文件名扩展(通配符)是否有最大限制?如果有,它是什么?看通配在 tldp.org 上。
假设我想对文件子集运行命令:
grep -e bar foo*
rm -f bar*
bash 扩展的文件数量是否有限制?如果有的话,限制是多少?
我并不是在寻找执行这些操作的替代方法(例如通过使用find
)。
答案1
glob 可以扩展的文件数量没有限制(可用内存除外)bash
。
但是,当这些文件作为参数传递给命令时,被处决(与 shell 内置函数或函数相反),那么您可能会execve()
在某些系统上遇到系统调用的限制。在大多数系统上,该系统调用对传递给它的参数和环境的累积大小有限制,并且在 Linux 上对单个参数的大小也有单独的限制。
欲了解更多详情,请参阅:
要解决该限制,您可以使用(假设 GNUxargs
或兼容):
printf '%s\0' foo* | xargs -r0 rm -f
上面,因为printf
是内置的(在bash
大多数类似 Bourne 的 shell 中),所以我们没有达到极限execve()
。并将根据需要xargs
将参数列表拆分为尽可能多的rm
调用以避免execve()
限制。
和zsh
:
autoload zargs
zargs foo* -- rm -f
和ksh93
:
command -x rm -f foo*