Unset an environment variable for a single command

ske*_*ist 44 unix bash environment-variables

In Bash, we can set an environment variable for a single command this way:

FOO=bar somecommand
Run Code Online (Sandbox Code Playgroud)

What if we want to unset a variable for a single command?

JB.*_*JB. 39

从技术上讲,他们不是环境变量,直到有人为export他们.但你至少可以将它们设置为空:

FOO= some command
Run Code Online (Sandbox Code Playgroud)

如果从环境中删除它们就足够了,您可以使用env:

env -u FOO somecommand
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用子shell:`(unset FOO; some command)`.但无论如何,我认为空的环境变量与不存在的环境变量不同,所以我不会使用`FOO = some command`方法. (16认同)
  • 从技术上讲,它们是环境变量,而不是当前环境:[变量被添加到已执行命令的环境中,不会影响当前的shell环境](http://www.gnu.org/software/bash/manual /bashref.html#Simple-Command-Expansion) (3认同)
  • @JB:它也没有为导出的变量调用setenv,但它确实将它们添加到传递给子进程的环境变量列表中.由于bash并没有真正区分环境变量和其他类型的变量,因此`export`的结果在执行的shell中并不是特别明显.(当然,你可以看到与`declare -p`的不同.)无论你对空的和缺席的变量有什么看法,bash也没有真正区分它们,除非你设置-u` - 如果你做,很多标准脚本都会破坏. (3认同)

qwe*_*guy 10

env -u FOO somecommand
Run Code Online (Sandbox Code Playgroud)

这将删除环境变量FOOsomecommand进程的环境。

并取消设置多个变量:

env -u FOO -u FOO2 somecommand
Run Code Online (Sandbox Code Playgroud)