如何使局部变量从一个循环传递到另一个循环

时间:2019-03-26 20:41:58

标签: bash loops scope

尝试从两个文件(foofile,barfile)中提取条目,并将它们作为参数传递到第三个文件(dothis.sh)中。它适用于bar但不适用于foo,因为这看起来是与范围相关的问题。我也尝试将foo循环嵌套到bar循环中,但没有成功:

    #!/bin/bash
    while read foo
                do
                        #echo $foo
                        export foo
    done < FooFile

    while read bar
        do
                #echo $bar
                export bar
    ./dothis.sh $bar $foo
    done < BarFile

2 个答案:

答案 0 :(得分:2)

这是在bash中同时循环两个输入的方法:

#!/bin/bash

while read -u 100 foo && read -u 101 bar; do
    ./dothis.sh "$foo" "$bar"
done 100<FooFile 101<BarFile

当一个文件没有更多行可读取时,它将终止。

答案 1 :(得分:1)

foo在程序范围内,但为空。
考虑以下代码:

x

结果是:

foo="test"
while read foo; do echo $foo; done < /dev/null
echo "foo=$foo"

问题是当没有输入时,foo将被设置为空。这就是程序中正在发生的事情。

也就是说,请注意oguzismail的评论。 (S)他正在引导您一个好的方向:

foo=

这确实是一个很好的开始,在FooFile和BarFile具有相同条目数的简单情况下,可能只需要这些。