【发布时间】:2011-11-20 21:40:09
【问题描述】:
考虑以下脚本:
#!/bin/bash
num=0
cat file | while read line; do
echo "$line"
lines[$num]="$line"
((num++))
echo "num = $num"
done
echo "end num = $num"
i=0
while [ $i -lt $num ]; do
echo "${lines[$i]}"
((i++))
done
通常,它应该逐行读取文件,将结果存储在数组中,然后遍历数组并逐行打印。问题是变量 $num 在第一个循环退出后以某种方式重置。对我来说,这个脚本的输出如下(使用一个包含一些随机垃圾的文件):
dsfkljhhsdfsdfshdjkfgd
num = 1
fdfgdfgdfg
num = 2
dfgdfgdfgdfg
num = 3
dfgdfgdfgdfgdfg
num = 4
dfgdfgdfgdfgdfgd
num = 5
fgdfgdfgdfg
num = 6
dfgdfgdfgdfg
num = 7
dfgdfgdfgdfgdfg
num = 8
dfgdfgdfgdfg
num = 9
dfgdfgdgdgdg
num = 10
dfgdffgdgdgdg
num = 11
end num = 0
这是为什么?我如何实现记住变量?我在 SUSE Linux 10 上使用 bash 3.1.17。
【问题讨论】:
-
可能问题出在管道上。使用标准输入不显示问题:ideone.com/87yi6