【问题标题】:tcsh : environment variable and pipetcsh : 环境变量和管道
【发布时间】: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),但我认为上面是一个简单的例子。

【问题讨论】:

    标签: pipe tcsh


    【解决方案1】:

    来自手册页:

    如果管道的任何组件除了最后一个是内置命令,管道在子shell中执行。

    所以变量只设置在子shell中。

    【讨论】:

    • 谢谢。我也想通了。在询问之前应该检查手册页。
    【解决方案2】:

    在您的情况下source a.csh | grep "bla" ; echo $a (where $a is set in a.csh),shell 在实际执行整个命令之前尝试扩展变量$a,因此它仍然不是由source a.csh 设置的。

    【讨论】:

    • "echo $a" 实际上是在一个长脚本的下一行,所以它实际上并没有在 source a.csh | 之前展开grep“布拉”。在子shell中执行的管道的第一部分回答了它。
    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 2019-12-30
    • 2019-09-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2021-12-10
    相关资源
    最近更新 更多