tcsh : environment variable and pipe

1.1k views Asked by At
$ setenv a "hi"

$ echo $a

hi

Similarly, when I do the below :

$ setenv b "hi" | grep "hi"

$ echo $b

b: Undefined variable.

Why is the setting lost?

My actual usage is source a.csh | grep "bla" ; echo $a (where $a is set in a.csh), but I thought the above is a simplistic case.

2

There are 2 answers

1
Mark Armstrong On BEST ANSWER

From the man page:

If any component of a pipeline except the last is a builtin command, the pipeline is executed in a subshell.

So the variable is set in a subshell only.

1
PetkoP On

In your case source a.csh | grep "bla" ; echo $a (where $a is set in a.csh) the shell tries to expand the variable $a before actually executing the whole command so it is still not set by source a.csh.