Bash使用exec设置变量

Ken*_*Ken 17 syntax bash exec

您可以为单个命令设置变量,如下所示:

MY_VARIABLE=my_value ./my_script.sh
Run Code Online (Sandbox Code Playgroud)

你可以交给另一个这样的脚本:

exec ./my_script.sh
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时:

exec MY_VARIABLE=my_value ./my_script.sh
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

exec: MY_VARIABLE=my_value: not found
Run Code Online (Sandbox Code Playgroud)

这是为什么?
有没有办法做到这一点?

dev*_*ull 46

您需要使用env来指定环境变量:

exec env MY_VARIABLE=my_value ./my_script.sh
Run Code Online (Sandbox Code Playgroud)

如果希望脚本以空环境或仅使用指定变量开头,请使用该-i选项.

来自man env:

   env - run a program in a modified environment
Run Code Online (Sandbox Code Playgroud)

  • 如何添加多个环境变量? (3认同)
  • 我知道它已经很旧了,但是只是回答@maxgalbu问题:`exec env VAR1 = value env VAR2 = value2。/ my_script.sh` (3认同)

ric*_*ici 7

在bash中,可以通过将分配放在命令的开头来为命令设置环境变量。这exec与任何其他命令的工作原理相同,因此您可以编写:

MYVARIABLE=my_value exec ./my_script.sh
Run Code Online (Sandbox Code Playgroud)

  • 关于'exec env'的好处是,您可以在可能设置外壳变量的变量上使用它。例如,如果我有一个为任意命令进行一些设置的脚本,则可以以`exec env“ $ @”`结尾,无论“ $ @”是否设置变量都可以。要使用此解决方案,我必须解析并拆分“ $ @”中的参数。 (3认同)