for循环无法从bash中的多个文件中提取数据

时间:2014-05-15 17:08:11

标签: bash

我正在尝试使以下循环起作用。我可以获得我想要的输出,如果我在命令行上运行它,一个文件作为输入,但它不是用for循环提取的。有什么帮助吗?

#!/bin/bash
FILES=$(/home/dd/ff/*.txt)
for file in $FILES
do
    grep -r -i -A4 'Compliance Calculation'  "$file"

 done

3 个答案:

答案 0 :(得分:2)

以这种方式尝试:

#!/bin/bash
FILES=(/home/dd/ff/*.txt)
for file in "${FILES[@]}"; do
   grep -r -i -A4 'Compliance Calculation' "$file"
done

有关解释,请参阅有关bash变量扩展的my video

答案 1 :(得分:2)

最小的解决方法是完全摆脱FILES

for file in /home/dd/ff/*.txt

答案 2 :(得分:0)

此脚本存在许多问题:

  1. 避免使用bash特定功能。而是使用/ bin / sh not / bin / bash。如果你必须使用bash然后/ usr / bin / env bash。直接调用/ bin / bash是不可移植的。
  2. $()运行一个命令,它不会扩展一个glob。它将尝试在扩展中运行最早的文件作为可执行文件。
  3. 你应该使用find | xargs模式而不是for循环。尝试查找/ home / dd / ff / -maxdepth 1-name' * .txt' | xargs grep -hr -i -A4'合规性计算'
  4. 如果必须使用循环,可以直接在循环中展开glob:

    for / home / dd / ff / * .txt

  5. 中的文件