【发布时间】:2013-12-03 12:06:07
【问题描述】:
$ 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),但我认为上面是一个简单的例子。
【问题讨论】:
$ 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),但我认为上面是一个简单的例子。
【问题讨论】:
来自手册页:
如果管道的任何组件除了最后一个是内置命令,管道在子shell中执行。
所以变量只设置在子shell中。
【讨论】:
在您的情况下source a.csh | grep "bla" ; echo $a (where $a is set in a.csh),shell 在实际执行整个命令之前尝试扩展变量$a,因此它仍然不是由source a.csh 设置的。
【讨论】: