在给定的外壳中,通常我会设置一个或多个变量,然后运行命令。最近,我了解了在命令前添加变量定义的概念:
FOO=bar somecommand someargs
这行得通...有点。当您更改LC_ *变量(这似乎会影响命令,但不影响其参数,例如'[az]'char范围)时,或者在将输出管道输送到另一个命令时,此命令将无效:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
我还可以在somecommand2前面加上“ FOO = bar”,它可以工作,但是会增加不必要的重复,并且对于根据变量解释的参数(例如,“ [az]”)无济于事。
那么,单行执行此操作的好方法是什么?
我在想一些事情:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
我有很多好的答案!目标是保持这种单线,最好不使用“导出”。总体上,使用Bash调用的方法是最好的,尽管括号中带有“ export”的版本更为紧凑。使用重定向而不是管道的方法也很有趣。
在跨平台(包括Windows)脚本或基于npm的项目(js或其他)的上下文中,您可能想看看cross-env模块。
—
Frank Nocke
我希望其中一个答案也能解释为什么这仅是一种工作,即为什么它不等同于在调用之前导出变量。
—
Brecht Machiels
(T=$(date) echo $T)
将会工作