FOO=bar somecommand someargs
这个方法有点用。但是当你改变一个LC_*
变量(似乎只影响命令,而不影响其参数,例如,[a-z]
字符范围),或者将输出导入到另一个命令时,它就不起作用了:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
我也可以在 somecommand2 前加上 FOO=bar
,这样也可以工作,但会增加不必要的重复,并且不能解决根据变量解释参数的问题(例如,[a-z]
)。
那么,在一行中有什么好的方法呢?
我认为可以考虑以下方式:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
我得到了很多好的答案!目标是保持这个代码成为一行,最好不使用 export
。使用调用 Bash 的方法是最好的,虽然带有 export
的括号版本更加紧凑。使用重定向而不是管道的方法也很有趣。
(T=$(date) echo $T)
可以工作。 - vp_arthexport
,即使副作用不会污染您的环境?换句话说,如果变量在命令执行后没有被设置,那么使用export
是否重要。例如:在子shell中。 - FreelanceConsultant(export foo="hello")
,echo $foo
输出一个空行,表明foo
在子 shell 外未设置。 - FreelanceConsultant