linux - bash+dose for 循环有限制吗?

标签 linux bash shell for-loop

我想知道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/

相关文章:

c - 如何解决这个 C/Linux 练习?

bash - bash 中字符串的多个替换

linux - 在Linux中,如何使用ssh和expect在远程服务器上监控shell脚本执行的进度

c# - 从 ASP.NET Core 3 应用程序执行 Linux Shell 命令

linux - 使用两个输入执行 for 循环

python - 解析键=值列表,其中空格具有双重含义(分隔符和val的一部分)

java - linux 和 solaris 机器上的 jvm 之间的区别

bash - 我怎么知道 `hg push` 何时失败(而不是 "no changes")

linux - Awk - 如何剪切一行,检查一列是否匹配某些内容,打印另一列?

objective-c - 如何获取cocoa程序运行的路径?