在给定的shell中,通常我会设置一个或多个变量,然后运行一个命令 . 最近我了解了将变量定义添加到命令的概念:
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
编辑:我有很多好的答案!目标是保持这个单线,最好不使用“导出” . 使用bash调用的方法总体上是最好的,尽管带有“export”的括号版本更紧凑 . 使用重定向而不是管道的方法也很有趣 .
4 回答
你也可以使用
eval
:由于
eval
的这个答案似乎并不能让所有人满意,所以让我澄清一下:当使用单引号书面时,它是完全安全的 . 这很好,因为它不会启动外部进程(如接受的答案),也不会在额外的子shell中执行命令(如另一个答案) .当我们得到一些常规观点时,给予每个人满意的_535696的替代方案可能是好的,并且具有这种快速
eval
“技巧”的所有好处(甚至可能更多!) . 只需使用一个功能!使用所有命令定义函数:并使用您的环境变量执行它,如下所示:
如何使用shell脚本?
如何导出变量,但只在子shell内?
Keith有一个观点,无条件执行命令,执行此操作: