Question

$ 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.

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top