Hi all,

I have a half off-topic question about bash, and figured out that there
were some experts here who may come to my help :)

It looks like, when using pipes in bash, the scope of variables changes.
Consider the following example:

--- 8< ---
#!/usr/bin/bash

for ((i = 0; i < 4; i++))
do
        n=$i
done

echo "n=$n i=$i"
--- 8< ---

This prints "n=3 i=4" as one would expect. However, if I change it to:

--- 8< ---
#!/usr/bin/bash

for ((i = 0; i < 4; i++))
do
        n=$i
done \
| cat

echo "n=$n i=$i"
--- 8< ---

This does print "n= i=", that is, the n and i variables are no more
defined past the loop. Can someone explain why? Is there a way to change
that behavior? I am in a case where I badly need the value of one inner
variable after such a construct.

Thanks,
-- 
Jean Delvare


_______________________________________________
Quilt-dev mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/quilt-dev

Reply via email to