【发布时间】:2012-06-07 00:57:46
【问题描述】:
在给定的 shell 中,通常我会设置一个或多个变量,然后运行命令。最近我了解了在命令前添加变量定义的概念:
FOO=bar somecommand someargs
这行得通……有点。当您更改 LC_* 变量(这似乎会影响命令,但 不 它的参数,例如,'[az]' 字符范围)或将输出传递到因此,另一个命令:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
我也可以在 somecommand2 前面加上“FOO=bar”,这可行,但会增加不必要的重复,并且对于根据变量解释的参数没有帮助(例如,'[az]') .
那么,在一行中执行此操作的好方法是什么?
我正在考虑以下顺序:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
我得到了很多很好的答案!目标是保持单线,最好不使用“导出”。使用 Bash 调用的方法总体上是最好的,尽管带有“导出”的括号版本更紧凑一些。使用重定向而不是管道的方法也很有趣。
【问题讨论】:
-
(T=$(date) echo $T)将工作 -
在跨平台(包括 windows)脚本或基于 npm 的项目(js 或其他)的上下文中,您可能需要查看cross-env module。
-
我希望其中一个答案也能解释为什么这只是一种工作方式,即为什么它不等同于在调用之前导出变量。
标签: bash environment-variables