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.
質問
$ 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.
解決
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.
他のヒント
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
.