Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:在命令中注入变量,该命令设置一个env变量_Bash_Environment Variables - Fatal编程技术网

Bash:在命令中注入变量,该命令设置一个env变量

Bash:在命令中注入变量,该命令设置一个env变量,bash,environment-variables,Bash,Environment Variables,在bash中,我试图通过在运行上述命令之前注入另一个变量来为给定命令设置环境变量: 用一个例子更容易描述这一点: setHELLO="HELLO=42" ${setHELLO} echo ${HELLO} 我希望这个脚本输出42,但是我得到一个错误第2行:HELLO=42:command not found 精度: 在这里,我可以简单地写作 HELLO=42 echo ${HELLO} 我的目标是不向shell脚本中的所有命令提供所有env变量,这就是为什么我在运行命令的

在bash中,我试图通过在运行上述命令之前注入另一个变量来为给定命令设置环境变量:

用一个例子更容易描述这一点:

setHELLO="HELLO=42"
${setHELLO} echo ${HELLO}
我希望这个脚本输出
42
,但是我得到一个错误
第2行:HELLO=42:command not found

精度: 在这里,我可以简单地写作

HELLO=42
echo ${HELLO}
我的目标是不向shell脚本中的所有命令提供所有env变量,这就是为什么我在运行命令的行(
echo${HELLO}
)中显式地设置env变量的原因

我还希望不要重复变量值声明,不要在每个命令前面像这样重新声明:

HELLO=42; echo command1
HELLO=42; echo command2
HELLO=42; echo command3

在那里放一个分号,你就好了。如果希望不损坏脚本环境中的局部变量,请使用函数或子shell

分号
HELLO=69
setHELLO='let HELLO=42'
(${setHELLO};echo${HELLO})42
(${setHELLO};echo${HELLO})42
(${setHELLO};echo${HELLO})42
echo$HELLO#69
作用
sayHello(){
本地HELLO=42
echo${HELLO}#42
echo${HELLO}#42
echo${HELLO}#42
}
你好=69
你好,42,42,42
echo${HELLO}#69
源bash脚本
#---------------
#这个脚本名为sayHello.sh
回声$HELLO
#---------------
#从其他脚本/命令行
你好=69
setHELLO='HELLO=42'
${setHELLO}源代码sayHello.sh#42
${setHELLO}源代码sayHello.sh#42
${setHELLO}源代码sayHello.sh#42
echo$HELLO#69

您不能期望
HELLO=42 echo${HELLO}
打印42。看见这会使问题无效吗?@另一个家伙它使我以为我知道的东西无效,但会带来更多的问题!我还将最后一个代码块固定为我想要的,关于重复的代码块,虽然这两个代码块都很有用,但第一个代码块将声明直接内联,而不是作为变量本身,第二个代码块是全局的。我们能否保留这个问题,因为答案在我的案例中更加完整和有用?