Bash 我可以只为复合命令定义一次环境变量吗?

Bash 我可以只为复合命令定义一次环境变量吗?,bash,sh,Bash,Sh,是否有一种方法可以为复合命令中的每个命令定义环境变量,而不必重复这些定义?例如,是否可以在不导出X1、X2和X3的情况下缩短此长度: X1=foo X2=bar X3=baz command1 && X1=foo X2=bar X3=baz command2 如果不希望环境变量在命令中也存在,一种方法是将整个命令放在子shell中: ( X1=foo; X2=bar; X3=baz; command1 && command2 ; ) 如果command1或co

是否有一种方法可以为复合命令中的每个命令定义环境变量,而不必重复这些定义?例如,是否可以在不导出X1、X2和X3的情况下缩短此长度:

X1=foo X2=bar X3=baz command1 && X1=foo X2=bar X3=baz command2

如果不希望环境变量在命令中也存在,一种方法是将整个命令放在子shell中:

( X1=foo; X2=bar; X3=baz; command1 && command2 ; )
如果
command1
command2
在单独的进程中运行,您可能需要导出变量,以便这些命令可以看到它们:

( X1=foo; X2=bar; X3=baz; export X1 X2 X3 ; command1 && command2 ; )

只有在子shell中运行它们,这很笨拙:
a=ab=bc=abcbash-C'echo$a;亿美元;echo$C'
问题不在于
command1
command2
是否在子shell中,而是它们是否在单独的进程中运行。如果
tmp.bash
包含单个命令
echo$FOO
(FOO=3;(../tmp.bash))
仍然生成输出<代码>(FOO=3;(bash./tmp.bash))没有;但是
(export FOO=3;(bash./tmp.bash))
可以。