这是我的代码:
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 行。
感谢您的建议。
你可以让它grep
输出直接传递给循环:
grep "$to_check" "$forbidden" | while read line; do
#process "${line}" and echo result
done
我删除了您示例中的显式子外壳,因为由于管道的原因,它已经在单独的子壳中。另外不要忘记引用 $line
变量以防止在使用时扩展空格。
您不必编写文件。只需迭代 grep 的结果:
grep $to_check $forbidden | (while read line; do
#process ${line} and echo result
done;
)
这可能适合您:
OIFS="$IFS"; IFS=$'n'; lines=($(grep $to_check $forbidden)); IFS="$OIFS"
for line in "${lines[@]}"; do echo $(process ${line}); done
第一行将grep
的结果放入变量数组lines
。
第二行处理数组,lines
将每一行放入变量line