Bash 变量在内部循环后为空

Bash 变量在内部循环后为空,bash,variables,Bash,Variables,我的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;"

我的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;
h0010001.conf;Y
h0010001.conf;YY
h0010001.conf;YYYYYYYYYYYYYYYYYYYYNNYYYYYYYYYYYYNYYYYYYNYYYYYYYYYNN
xh0010001.conf;
因此,由于某种原因,t变量在内部循环完成后为空。
我想要实现的是,在第二个循环之后将t-写入一个文件。

@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)
在读ii时
做
如果grep-q“$ii”$i
然后
t=$t“y
其他的
t=$t“n
fi
回声“$t”

完成了<@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)
在读ii时
做
如果grep-q“$ii”$i
然后
t=$t“y
其他的
t=$t“n
fi
回声“$t”

done<管道中的命令在子shell中执行,因此变量赋值不会影响原始shell。管道中的命令在子shell中执行,因此变量赋值不会影响原始shell。不过,外部的
egrep
是完全无用的。@gniourf_gniourf这对问题无关紧要,但是是的,这里有很多我会写的不同的东西,事实上它们之间有某种关联,因为如果OP没有使用这个
egrep
,并且直接使用globs进行过滤,这个问题就永远不会出现!他在问为什么他的变量“不稳定”。他可以通过许多(不相关的)方式避免出现问题。虽然外部的
egrep
是完全无用的。@gniourf_gniourf这对问题无关紧要,但是的,这里有很多我会写的不同的东西,事实上它是有某种关联的,因为如果OP没有使用这个
egrep
,并且直接使用globs进行过滤,这个问题就永远不会出现!他在问为什么他的变量“不稳定”。他可以通过许多(不相关的)方式避免出现问题。