嵌套时使用fd读取循环

时间:2017-03-02 15:09:34

标签: bash shell loops file-descriptor io-redirection

我试图在嵌套循环中读取两个不同的输入而没有成功。我已经按照最佳答案on this question进行了操作,并查看了 Advanced Bash-Scripting Guide file descriptors page

我用来测试我的问题的示例脚本。

#!/bin/bash
while read line <&3 ; do
    echo $line
    while read _line <&4 ; do
        echo $_line
    done 4< "sample-2.txt"
done 3< "sample-1.txt"

样本-1.txt

的内容
Foo
Foo

sample-2.txt

的内容
Bar
Bar

预期输出

Foo
Bar
Bar
Foo
Bar
Bar

我得到的输出

Foo
Bar

1 个答案:

答案 0 :(得分:1)

您的文字文件不会以换行符结尾:

$ printf 'Foo\nFoo' > sample-1.txt
$ printf 'Bar\nBar' > sample-2.txt
$ bash tmp.sh
Foo
Bar
$ printf '\n' >> sample-1.txt
$ printf '\n' >> sample-2.txt
$ bash tmp.sh
Foo
Bar
Bar
Foo
Bar
Bar

read如果到达文件末尾而没有看到换行符,则其退出状态为非零。有一个黑客可以解决这个问题,但最好确保你的文本文件以换行符结尾。

# While either read is successful or line is set anyway
while read line <&3 || [[ $line ]]; do