我写了一个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
答案 0 :(得分:2)
您只打开输入文件一次 - 这意味着一旦第一个grep
读取它,就没有什么可以让将来阅读。
由于bash无法调用seek()
,因此每次调用都需要重新打开一次文件:
for i in "${VAR_LIST[@]}"
do
grep "$i" >"${FilePrefix}${counter}.tab.txt" <"$1"
counter=$((counter+1))
done