首页 > 解决方案 > Bash:在命令中注入变量,设置环境变量

问题描述

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

用一个例子来描述它更容易:

setHELLO="HELLO=42"
${setHELLO} echo ${HELLO}

我希望这个脚本输出42,而不是我得到一个错误line 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

标签: bashenvironment-variables

解决方案


在里面放一个分号就可以了。如果您不想破坏脚本环境中的局部变量,请使用函数或使用子shell

分号

HELLO=69
setHELLO='let HELLO=42'
( ${setHELLO}; echo ${HELLO} ) # 42
( ${setHELLO}; echo ${HELLO} ) # 42
( ${setHELLO}; echo ${HELLO} ) # 42
echo $HELLO                    # 69

功能

sayHello() {
    local HELLO=42
    echo ${HELLO}   # 42
    echo ${HELLO}   # 42
    echo ${HELLO}   # 42
}

HELLO=69
sayHello      # 42, 42, 42
echo ${HELLO} # 69

来源 bash 脚本

#---------------
# This script is called sayHello.sh
echo $HELLO
#---------------

# From some other script/cmdline
HELLO=69
setHELLO='HELLO=42'
${setHELLO} source sayHello.sh  # 42
${setHELLO} source sayHello.sh  # 42
${setHELLO} source sayHello.sh  # 42
echo $HELLO                     # 69

推荐阅读