bash - 存储多行文件的变量

时间:2012-11-19 13:41:18

标签: file bash

这是我的代码:

grep $to_check $forbidden >${dir}variants_of_interest;

cat ${dir}variants_of_interest | (while read line; do 
     #process ${line} and echo result
done;
)

感谢grep我得到的数据行然后我在循环中单独处理。我想使用变量而不是使用文件 variants_of_interest

原因是我担心写入文件数千次(并因此从中读取)会迅速减慢计算速度,因此我希望避免写入文件可能会有所帮助。你觉得怎么样?

我必须完成数以千计的grep命令,而 variants_of_interest 最多只包含10行。

感谢您的建议。

3 个答案:

答案 0 :(得分:3)

您可以让grep将其输出直接传递给循环:

grep "$to_check" "$forbidden" | while read line; do 
  #process "${line}" and echo result
done

我删除了示例中的显式子shell,因为由于管道,它已经在一个单独的子shell中。另外,不要忘记引用$line变量以防止在使用时扩展空格。

答案 1 :(得分:2)

你不必写一个文件。只需迭代grep的结果:

grep $to_check $forbidden | (while read line; do 
     #process ${line} and echo result
done;
)

答案 2 :(得分:0)

这可能对您有用:

OIFS="$IFS"; IFS=$'\n'; lines=($(grep $to_check $forbidden)); IFS="$OIFS"
for line in "${lines[@]}"; do echo $(process ${line}); done

第一行将grep的结果放入变量数组lines

第二行处理数组lines,将每一行放入变量line