在给定的shell中,通常我会设置一个或多个变量,然后运行命令。最近,我学习了一个概念,将变量定义前置到命令:
FOO=bar somecommand someargs
这工作…种。当你改变一个LC_*
变量(它似乎会影响命令,但不它的参数,例如,[a-z]
char范围)或当输出输出到另一个命令时,它就不起作用了:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
我也可以用FOO=bar
来前置一些命令2,这是可行的,但会增加不必要的重复,而且它对依赖变量解释的参数(例如[a-z]
)没有帮助。
那么,在一行上做这个的好方法是什么呢?
我想的大概是:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
我得到了很多很好的答案!目标是保持它是一行程序,最好不使用export
。使用Bash调用的方法总体上是最好的,尽管带有export
的插入版本更紧凑一些。使用重定向而不是管道的方法也很有趣。