我想知道for-loop命令可以支持的最大数量
例如我有900 .txt文件
当我运行for循环时,我看到所有文件都与grep
匹配但是循环剂量可以读取例如20000个文件吗?有什么限制?
ls | grep .txt | wc -l
950
for-loop
for FILE_NAME in ` ls | grep .txt `
do
grep WORD $FILE_NAME
done
答案 0 :(得分:2)
像for
循环这样的内置构造没有最大值:
for FILE_NAME in *.txt; do
可以将*.txt
扩展为当前目录中存在的任意数量的名称。由于bash
扩展了模式并且遍历结果,因此它可以管理列表本身。对于像
printf "%s\n" *.txt
因为bash
扩展了模式并在解释器进程中执行printf
。
与
对比ls *.txt
在这里,我们知道有两个独立的程序(bash
解释器和ls
)通过操作系统的API进行通信,以便将参数传递给命令。 bash
必须将模式扩展为所有匹配的文件,它们使它们适合用于将参数传递给新进程的数组(想想argv
函数的main()
)。 此数组具有您的操作系统定义的最大大小,如果匹配文件太多,将导致"命令行太长"或者"太多的论点"错误。
答案 1 :(得分:0)
1959年文件的测试运行
$ ls | wc -l
1960
使用for循环
$count=0
$ for file in *
> do
>(( count += 1 ))
> done
echo $count
1959
肯定适用于900个文件
带有globbing的 for
循环可用于处理目录中的每个文件。
#!/bin/bash
filename="*txt"
for file in $filename
do
#Do something
done
Bash对通配符识别的表达式执行文件名扩展。