On 9/9/05, Jean Delvare <[EMAIL PROTECTED]> wrote: > 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.
The ( ) syntax creates a sub-shell. Variables can be exported into the sub-shell, but cant come back out. If you dont want a subshell and all that entails, use curly brackets. http://www.tldp.org/LDP/abs/html/subshells.html -- John _______________________________________________ Quilt-dev mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/quilt-dev
