【问题标题】:How do you assign shell variables inside of a sh -c "..." command?如何在 sh -c "..." 命令中分配 shell 变量?
【发布时间】:2011-01-14 09:12:36
【问题描述】:

当你执行时

jeremy@home:/$DOG=happy; echo $DOG;

你得到输出

happy

但是,当你执行 jeremy@home:/$sh -c "DOG=happy; echo $DOG;"

甚至

jeremy@home:/$sh -c "DOG=happy; echo "$DOG";"

jeremy@home:/$sh -c "DOG=happy; echo \"$DOG\";"

jeremy@home:/$sh -c "DOG=happy; echo '$DOG';"

你只得到一个空行。这是怎么回事?如何从 sh -c 命令中实际设置变量?

【问题讨论】:

    标签: bash shell variables


    【解决方案1】:

    转义美元符号 (\$)。

    > sh -c "DOG=happy; echo \$DOG;"
    happy
    

    另一种选择是使用单引号而不是双引号 - 变量不在单引号内评估,因此 $DOG 将传递给 sh 进行评估。

    > sh -c 'DOG=happy; echo $DOG'
    happy
    

    但是,如果您需要在传递给 sh 之前替换变量,并且还要传递某些变量,通常最简单的方法是转义您确实想要传递的变量。

    【讨论】:

    • 谢谢,顺便说一下,我试图将它作为 find 命令的一部分执行,例如 find 。 -exec sh -c "...";,所以我想我确实想通过变量 {},虽然我不确定这是否是通过不同的机制完成的。
    • {} 只是find 的一个变量。
    【解决方案2】:

    好的命令是:

    sh -c 'DOG=happy; echo $DOG;'
    

    或者你可以直接避开“$”符号

    sh -c "DOG=happy; echo \$DOG;"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2017-07-21
      • 1970-01-01
      • 2015-06-16
      • 2019-01-22
      相关资源
      最近更新 更多