在arraysbash中存储grep输出

我需要在目录中search一个模式,并将包含它的文件的名称保存在一个数组中。

search模式:

grep -HR "pattern" . | cut -d: -f1 

这会打印出包含“pattern”的所有文件名。

如果我尝试:

 targets=$(grep -HR "pattern" . | cut -d: -f1) length=${#targets[@]} for ((i = 0; i != length; i++)); do echo "target $i: '${targets[i]}'" done 

这只打印一个包含所有文件名的string的元素。

 output: target 0: 'file0 file1 .. fileN' 

但是我需要:

  output: target 0: 'file0' output: target 1: 'file1' ..... output: target N: 'fileN' 

如何在不对对象进行枯燥的分割操作的情况下实现结果?

您可以使用:

 targets=($(grep -HRl "pattern" .)) 

注意在BASH中使用(...)来创建数组。

你也可以使用grep -lgrep的输出中获取文件名(如我的命令所示)。