【问题标题】:Scope of exported variables in bashbash 中导出变量的范围
【发布时间】:2013-11-13 09:09:56
【问题描述】:

我在 bash 中执行了一个需要环境变量的命令。如果我这样称呼它,一切正常:

export MYVAR=value & my_first_command

但现在我想将结果通过管道传递给第二个命令,该命令需要相同的环境变量。我试过这个:

export MYVAR=value & my_first_command | my_second_command

在这种情况下,MYVAR 似乎没有设置为my_second_command。使MYVAR 也可用于my_second_command 的正确语法是什么?

【问题讨论】:

  • export 应该使 MYVAR 可用于所有子进程。 FWIW,你有一个错字,如果前面的命令成功,请尝试export MYVAR=value && my_first_command 执行my_first_command
  • 我什至不明白第一次尝试是如何工作的。使用&,变量应该只在它的无操作子shell中导出,而不是my_first_command
  • export MYVAR=value ; my_first_command ; my_second_command 有什么问题?
  • @slayedbylucifer 在这种情况下,我认为它可以工作。因为它只是命令序列,其中 ';'充当 cmd 分隔符。带“|”它不会按照上面的原始问题陈述工作
  • Scope 在这里不是很正确的概念。这意味着MYVAR 没有在子级中定义,但它可以以某种方式查看父级以查看是否在其中定义了MYVAR。相反,子级在开始时会获得自己的MYVAR 副本,即使父级在子级仍在运行时更改其MYVAR 的值也不受影响。

标签: bash shell environment-variables


【解决方案1】:

& 不正确,应改为 ;

使用&在语法上是有效的,并且在后台运行一个命令;但是将export 作为后台任务运行毫无意义。

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多