我想知道for循环命令可以支持的最大数量是多少
例如我有 900 个 .txt 文件
当我运行 for 循环时,我看到所有文件都与 grep 匹配
但是 for 循环的剂量可以读取例如 20000 个文件?有什么限制?
ls | grep .txt | wc -l
950
for循环
for FILE_NAME in ` ls | grep .txt `
do
grep WORD $FILE_NAME
done
最佳答案
像 for
循环这样的内置结构没有最大值:
for FILE_NAME in *.txt; do
可以将*.txt
扩展为当前目录中存在的多个名称。由于 bash 扩展了模式并迭代结果,因此它可以自行管理列表。这同样适用于像
printf "%s\n" *.txt
因为 bash
都扩展了模式并在解释器进程本身中执行 printf
。
对比一下
ls *.txt
在这里,我们知道有两个独立的程序(bash
解释器和 ls
)通过操作系统的 API 进行通信,以将参数传递给命令。 bash
必须将模式扩展到所有匹配的文件,它们将它们放入用于将参数传递给新进程的数组中(想想 main()
函数的 argv
)。 此数组的最大大小由操作系统定义,如果匹配文件太多,将导致“命令行太长”或“参数太多”错误。
关于linux - bash+dose for 循环有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26586443/