$ setenv a "hi"
$ echo $a
喜
同样,当我这样做时:
$ setenv b "hi" | grep "hi"
$ echo $b
b:未定义的变量。
为什么设置会丢失?
我的实际使用情况为source a.csh | grep "bla" ; echo $a (where $a is set in a.csh)
,但我认为以上是一个简单的案例。
答案 0 :(得分:2)
从手册页:
如果除了last之外的管道的任何组件是内置命令,则管道在子shell中执行。
因此变量仅在子shell中设置。
答案 1 :(得分:1)
在你的情况source a.csh | grep "bla" ; echo $a (where $a is set in a.csh)
中,shell在实际执行整个命令之前尝试扩展变量$a
,因此它仍然不是由source a.csh
设置的。