只有“for”循环的一部分正在工作

时间:2017-06-21 16:19:13

标签: bash

我写了一个bash脚本,但我无法理解我做错了什么。这是:

#!/bin/bash

VAR_LIST=('var_A' 'var_B' 'var_C')
FilePrefix='mystring_'
counter=1

for i in "${VAR_LIST[@]}"
do
        grep "$i" > "${FilePrefix}${counter}.tab.txt"
        counter=$((counter+1))
done <$1

结果:为每个变量创建一个文件,但只有第一个变量包含数据;其他文件都是空的。我已手动验证每个变量应返回几行。奇怪的是,如果我这样做:

for i in "${VAR_LIST[@]}"
do 
 echo "$i"
done

我得到了VAR_LIST

中所有变量的列表

1 个答案:

答案 0 :(得分:2)

您只打开输入文件一次 - 这意味着一旦第一个grep读取它,就没有什么可以让将来阅读。

由于bash无法调用seek(),因此每次调用都需要重新打开一次文件:

for i in "${VAR_LIST[@]}"
do
        grep "$i" >"${FilePrefix}${counter}.tab.txt" <"$1"
        counter=$((counter+1))
done