1

我的 bash 脚本有问题

t='Hostname\cfg;'

echo "Header" > $DST

for i in *
do
        t="$i;"
        egrep -v "(^$|^#)" $IPLIST | while read ii
        do  
                if grep -q "$ii" $i
                then
                        t=$t"y;"
                else
                        t=$t"n;"
                fi  
echo "$t"
        done

echo "x$t"

        n=$(($n + 1))
        echo "$n"

        #echo "$ii;$t" # >> $DST
        #t=""
done

产生以下输出:

h0010001.conf;y;
h0010001.conf;y;y;
<ommited>
h0010001.conf;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;n;n;y;y;y;y;y;y;y;y;y;y;y;y;n;y;y;y;y;y;y;n;y;y;y;y;y;y;y;y;y;n;n;
xh0010001.conf;

因此,由于某种原因,在内循环完成后 t 变量为空。我想要实现的是,在第二个循环之后将 t - 写入文件。

4

1 回答 1

1

@Barmar 很到位。这是一个典型的解决方法。

将 while 循环更改为在父 shell 中运行:

while read ii
    do  
            if grep -q "$ii" $i
            then
                    t=$t"y;"
            else
                    t=$t"n;"
            fi  
            echo "$t"
    done < <(egrep -v "(^$|^#)" $IPLIST)
于 2013-10-29T10:23:44.900 回答