bash +剂量循环有限制吗?

时间:2014-10-27 11:21:36

标签: linux bash shell for-loop

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

2 个答案:

答案 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对通配符识别的表达式执行文件名扩展。