【问题标题】:Why is my shell (sh) variable in command mode not exported?为什么我的命令模式下的 shell (sh) 变量没有导出?
【发布时间】:2016-03-17 12:15:47
【问题描述】:

如果我运行这样的 shell 命令,我导出的变量是不可见的。

sh -c "export x=100; echo x is $x"

我希望它输出“x 是 100”,但它只是说“x 是”。如果我在交互模式下运行它,它会像预期的那样工作。

我的 shell 版本是:GNU bash,版本 3.2.51(1)-release (x86_64-suse-linux-gnu)

【问题讨论】:

    标签: linux shell sh


    【解决方案1】:

    $x 被当前 shell 解释,而不是你正在启动的 sh shell。

    用反斜杠转义:

    sh -c "export x=100; echo x is \$x"
    

    或者使用单引号来防止shell解释变量:

    sh -c 'export x=100; echo x is $x'
    

    【讨论】:

    • 如果它适合你,那么请接受答案,以便它可以被关闭。谢谢
    • @Utsav:我需要等待 10 分钟才能接受(这对我来说实际上是新的,但大多数答案不像这个那么容易验证,所以我以前从未遇到过这个限制)。跨度>
    • @tripleee 它是可移植的(它在posix中,并且所有模糊的现代shell都支持它),它似乎在某些情况下有一些怪癖(这不是与“不可移植”相同)...
    • @tripleee 如果我们要排除非 posix 系统,那么真正“便携”的系统很少。而默认的 Solaris 10 shell 似乎是一个例外(请注意,Solaris 11 已经发布了一段时间)。一般来说,“便携”的意思是“符合 posix”。
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多