bash - 从循环内部构造命令不会呈现“=”符号
问题描述
我正在尝试从.env
文件中读取我的脚本并在我从中调用此脚本的会话中导出环境变量。
这是我的.env
文件:
# Some comment here
NODE_ENV=development
JWKS_AUDIENCE=test test02
和我从这个文件中读取的 bash 脚本:
set-local-env.sh
:
IFS='=' # delimiter
while read LINE
do
if [[ $LINE =~ ^\#.* ]] ;
then
continue
fi
read -ra ADDR <<< "$LINE"
export ${ADDR[0]}=\"${ADDR[1]}\"
done < .env.development
export myvar="sup"
我通过使用source
设置运行它的会话的环境来运行它:
$ source ./set-local-env.sh
-bash: export: `"development "': not a valid identifier
-bash: export: `"test test02"': not a valid identifier
底部的最后一个导出myvar="sup"
正在工作:
$ echo $myvar
sup
我的猜测是该命令没有正确构建,我得到的export ${ADDR[0]}=\"${ADDR[1]}\"
是:
export NODE_ENV="development"
export JWKS_AUDIENCE="test test02"
我尝试回显export
命令(即echo export ${ADDR[0]}=\"${ADDR[1]}\"
),这就是我得到的:
export NODE_ENV "development"
export JWKS_AUDIENCE "test test02"
export myvar=sup
从循环内部生成的两个exports
没有等号。为什么会发生这种情况,我该如何解决?
解决方案
你不需要这个:
read -ra ADDR <<< "$LINE"
export ${ADDR[0]}=\"${ADDR[1]}\"
和这个:
IFS='='
只需执行以下操作,您就可以开始了:
export "$LINE"
推荐阅读
- java -
字符渲染在一段时间后停止工作 - java - wildfly:从类路径目录中读取属性文件
- python-3.x - wget:无法在 google colab 中解析主机地址
- mysql - 在数据库表中维护记录历史
- ant - if 不支持 ant 构建文件中嵌套的 "equals" 元素
- javascript - 如何在javascript中从当前日期开始7天创建一个星期几的数组(即0代表星期日,1代表星期一等)?
- sprite-kit - 为什么为我的 SKSpriteNode 启用 physicBody 会导致异常?
- java - 在没有主方法或任何其他方法的情况下访问第一类中另一个类的方法(直接在类内部)
- python - 如何在 python 中从 Web 浏览器控制台运行命令?
- git - 在 Jenkins 中自动启动和停止构建