quilt-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Quilt-dev] [OT] bash question


From: John Vandenberg
Subject: Re: [Quilt-dev] [OT] bash question
Date: Fri, 9 Sep 2005 07:49:20 +1000

On 9/9/05, Jean Delvare <address@hidden> 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]