28

我有一个包含两列信息的文件:

box1 a1
box2 a2

我正在尝试逐行读取此文件read并将每个行项放入一个变量中。

在第一次通过时,$a将包含box1并且$b将包含a1.

在第二遍中,$a将包含box2并且$b将包含a2等。

我用来尝试实现的代码示例如下:

for i in text.txt; do
    while read line; do
        echo $line | read a b;
    done < text.txt;
    echo $a $b;
done

这给了我以下结果:

box1 a1 box2 a2

当我预期以下结果时:

box1 a1
box2 a1

我怎样才能解决这个问题?

4

2 回答 2

67

管道进入read命令会导致变量被设置在子shell中,这使得它们无法访问(实际上,它们已经消失)到您的代码的其余部分。但是,在这种情况下,您甚至不需要for循环或第二个read命令:

while read -r a b; do
    echo "$a" "$b"
done < text.txt
于 2013-03-15T21:20:50.890 回答
0

另一种方法

echo -e "one\ntwo\nthree" | {
read -r a; 
read -r b; 
read -r c;
echo "output of ($a, $b, $c)"
}


于 2022-02-23T06:31:21.427 回答