首页 > 解决方案 > 从循环内部构造命令不会呈现“=”符号

问题描述

我正在尝试从.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命令(即echo export ${ADDR[0]}=\"${ADDR[1]}\"),这就是我得到的:

export NODE_ENV "development"
export JWKS_AUDIENCE "test test02"
export myvar=sup

从循环内部生成的两个exports没有等号。为什么会发生这种情况,我该如何解决?

标签: bash

解决方案


你不需要这个:

read -ra ADDR <<< "$LINE"
export ${ADDR[0]}=\"${ADDR[1]}\"

和这个:

IFS='='

只需执行以下操作,您就可以开始了:

export "$LINE"

推荐阅读