我遇到嵌套循环问题。代码如下所示:
while IFS='' read -r line || [[ -n "$line" ]]; do
num=0
for i in $line; do
eval a_${num}="\"$(echo $i)\""
echo $a_0
((num=num+1))
done
done < file
在文件中有很多行。每行包含16个空格分隔值:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
当我读取文件中的每一行时, i 的第一次出现应设置为变量 a_0
因此,当我回显此值时,如果文件中有两个相同的行,则应该读取:
01
01
然而,这就是:
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
01
而不是回显两次,它将迭代行中值的两倍 - 16 + 16次。我在这里做错了什么?
答案 0 :(得分:0)
一段时间后,这段代码(几乎)解决了我的问题:
file=`cat files.txt`
# read the lines in the file and store every line in variable as "line"
while read -r line; do
# declare an array variable from every space separated value in "line"
declare -a arr=`echo $line`
# set counter to zero
num=0
# now loop through the above array
for i in ${arr[*]}; do
# set a variable as "a_$num" that equals the current value in array
eval a_${num}="'\"$(echo $i)\"'"
# incremenate "num" by 1
((num=num+1))
done
# echo the first value in current line
echo $a_0
done <<< $file
现在结果应该是:
01
01
....但由于某种原因,即使有两行,它也只会被回复一次:
01
我仍然可以使用该脚本。任何人都可以解决最后一点它会很棒!