bash - 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
解决方案
在里面放一个分号就可以了。如果您不想破坏脚本环境中的局部变量,请使用函数或使用子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
推荐阅读
- python - 为 Python 程序设置解释器
- git - 如何每秒 Git 拉取和显示状态
- python - 使用 pytest 测试模块执行
- ruby-on-rails - 我无法在 rails 6.0.3 中使用 gem 'ar-octopus'
- applescript - 如何使用 AppleScript 在邮件应用程序中选择来自发件人的邮件?
- r - fread:na.strings 中的空字符串 ("") 不会被解释为 NA
- python - Python循环函数仅在Dataframe中的行中满足条件时提取第一列名称
- opengl - 使用 Alpha 混合进行深度测试
- laravel - 在每个刀片中包含导航栏和页脚的正确方法 - Laravel 7?
- angular - 向生产模式添加新更改后清除 Angular 缓存