【问题标题】:Bash: inject variable in command, that sets an env variable [duplicate]Bash:在命令中注入变量,设置环境变量[重复]
【发布时间】:2021-01-12 22:32:35
【问题描述】:

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

用一个例子更容易描述:

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

我希望这个脚本输出42,而不是我得到一个错误line 2: HELLO=42: command not found

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

HELLO=42
echo ${HELLO}

我的目标是不为我的 shell 脚本中的所有命令提供所有 env 变量,这就是为什么我在运行命令的行中明确设置 env 变量 (echo ${HELLO})

我的目标也是不重复变量值声明,不在每个命令前面重新声明,如下所示:

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

【问题讨论】:

  • 您不能指望HELLO=42 echo ${HELLO} 打印 42。请参阅this post。这会使问题无效吗?
  • @thatotherguy 它使我以为我知道的无效,但带来了更多问题!我将最后一个代码块修复为我想要的
  • 另外,关于重复项,虽然两者都很有用,但第一个具有直接内联的声明而不是作为变量本身,第二个是全局的。我们可以保留这个问题,因为答案对我来说更完整和更有帮助吗?

标签: bash environment-variables


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 2014-11-29
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多