使用env为bash中的一个程序调用设置环境变量

前端之家收集整理的这篇文章主要介绍了使用env为bash中的一个程序调用设置环境变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过命令env调用一个修改环境的shell命令。

根据手册

env HELLO='Hello World' echo $HELLO

应该回应Hello World,但是没有。
如果我做

HELLO='Hello World' bash -c 'echo $HELLO'

它按预期打印Hello World(感谢this answer的这个信息)。

我在这里缺少什么?

干杯,
尼克拉斯

这是因为在第一种情况下,当前的shell在运行命令之前扩展了$ HELLO变量。并且您当前的shell中没有设置HELLO变量。

env HELLO =’Hello World’echo $ HELLO

会这样做:

>展开任何给定的变量,在这种情况下为$ HELLO
>使用3个参数’HELLO = Hello World’,’echo’和”(一个空字符串)运行env,因为在当前shell中没有设置HELLO变量)
> env命令将在其环境中运行并设置HELLO =’Hello World’
> env将使用参数“'(一个空字符串)运行echo

如你所见,当前的shell扩展了$ HELLO变量,它没有设置。

HELLO =’Hello World’bash -c’echo $ HELLO’

会这样做:

>为以下命令设置变量HELLO =’Hello World
>使用2个参数’-c’和’echo $ HELLO’运行bash
>因为最后一个参数用单引号括起来,其中的任何内容都不会展开
>新的bash依次运行命令echo $ HELLO
>要在新的bash子shell中运行echo $ HELLO,bash首先扩展它可以的任何东西,在这种情况下,$ HELLO,并且父shell为我们设置为“Hello World”。
> subshel​​l运行echo’Hello World’

如果你试图做例如这个:

env HELLO =’Hello World’echo’$ HELLO’

>当前的shell会扩展任何可以的东西,这是因为$ HELLO被包含在单引号中
>运行env与3个参数’HELLO = Hello World’,’echo’和’$ HELLO’
> env命令将在其环境中运行并设置HELLO =’Hello World’
> env将使用参数’$ HELLO’运行echo

在这种情况下,没有shell会扩展$ HELLO,所以echo接收字符串$ HELLO并打印出来。可变扩展仅由外壳完成。

猜你在找的Bash相关文章