假设我想foo
使用不同的变量集运行该流程,例如:
FOO=1 foo
FOO=2 foo
FOO=1 BAR=7 foo
如何在不重复执行foo
命令的情况下做到这一点?例如,通过循环设置环境,例如:
for e in 'FOO=1' 'FOO=2' 'FOO=1 BAR=7'; do
env "$e" foo
done
$e
这几乎有效,除了在equal to 的情况下FOO=1 BAR=1
,FOO
被设置为1 BAR=1
并且BAR
根本没有被设置,因为env
看到一个参数。我可以使用env $e
, ie,不加引号e
- 但如果变量值有空格,它就不起作用。
答案1
你不会变得更矮。如果问题是您要运行的命令很长,您可以编写一个辅助函数,例如
r(){ env "$@" foo with lots of args ; }
r FOO=1
r FOO=2
r FOO=1 BAR=7
r FOO='1 BAR=7'
如果您知道某个字符不会出现在环境变量的名称或值中,您可以使用它来分割,或者您可以尝试正确引用这些值并使用eval
.
问题是你为什么要这样做?