Domanda

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

È stato utile?

Soluzione

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.

Altri suggerimenti

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top