Bash 从带有空格的脚本导出环境变量

Bash 从带有空格的脚本导出环境变量,bash,go,environment-variables,whitespace,Bash,Go,Environment Variables,Whitespace,问题的大局:我正在创建Golang脚本,该脚本将用于安全地检索环境变量,并将它们导出以用于另一个进程 正如我们所知,这并不容易实现,因为脚本无法将变量导出到[1]、[2]之外 因此,我们尝试的方法基本上是使用bash backticks来运行该命令 最终用途如下: `aws-env` && printenv 其中printenv应显示由包含导出语句的已评估aws env输出导出的变量 问题出现在包含空格/新行等的变量上 简化下划线代码,此代码有效: $ export A=b\

问题的大局:我正在创建Golang脚本,该脚本将用于安全地检索环境变量,并将它们导出以用于另一个进程

正如我们所知,这并不容易实现,因为脚本无法将变量导出到[1]、[2]之外

因此,我们尝试的方法基本上是使用bash backticks来运行该命令

最终用途如下:

`aws-env` && printenv
其中printenv应显示由包含导出语句的已评估aws env输出导出的变量

问题出现在包含空格/新行等的变量上

简化下划线代码,此代码有效:

$ export A=b\ b
$ printenv | grep A=
A=b b
这不是:

$ `echo export A=b\ b`
$ printenv | grep A=
A=b
我已经浏览了其他Stackoverflow讨论[3],但找不到该问题的明确答案大多数情况下,答案是不使用反勾号,但对于我们的总体问题,我们尝试解决它不会那么容易

[1] [2] [3]
如果我没有弄错,aws env将输出如下内容:

export A=b\ b
export B=test
export C=this\ is\ a\ test
您希望这些命令在当前shell中执行吗?如果是这样,这应该是可行的:

. <(aws-env)
printenv | egrep "^[ABC]="

如果我没有弄错,aws env将输出如下内容:

export A=b\ b
export B=test
export C=this\ is\ a\ test
您希望这些命令在当前shell中执行吗?如果是这样,这应该是可行的:

. <(aws-env)
printenv | egrep "^[ABC]="
我已经用eval'aws env测试过了` 它可以使用转义空格和引号。

我已经用eval`aws env进行了测试`
它可以在同一个shell中使用转义空格和引号。

。脚本的用法如下:`aws env`&&printenv printenv应该显示由aws env导出的env变量。aws env正在输出导出。。。然后应该用倒勾来评估。只是为了再次确认您的需求?aws env希望做什么?不是很清楚,不是吗:是fmt.Printfexport%s='%s'\n,env,value?请注意,在这种情况下,如果导出语句包含其他shell变量,它们将不会被外推。@favoretti不幸地”也不起作用。$`echo导出A='b'`&&env|grep A=A=bIn同一个shell。脚本的用法如下:`aws env`&&printenv printenv应该显示由aws env导出的env变量。aws env正在输出导出。。。然后应该用倒勾来评估。只是为了再次确认您的需求?aws env希望做什么?不是很清楚,不是吗:是fmt.Printfexport%s='%s'\n,env,value?请注意,在这种情况下,如果导出语句包含其他shell变量,它们将不会被外推。@favoretti不幸地”也不起作用。$`echo导出A='b'`&&env|grep A=A=b此操作不起作用。如果您创建了一个简单版本的aws env,它只回显了几行导出行,您会发现该命令没有任何效果。当我试图创建一个类似的Python版本的was env来做同样的事情时,我发现使用上面的he时出现了一个BrokenPipeError。然后我尝试了一个脚本,似乎是这样。而source在进程替换中并没有像预期的那样工作。这不是他正在尝试做的吗?$/aws环境导出A=b\b导出b=test导出C=this\is\A\test$printenv | egrep^[ABC]=$/aws env$printenv | egrep^[ABC]=C=这是测试B=测试a=B这不起作用。如果您创建了一个简单版本的aws env,它只回显了几行导出行,您会发现该命令没有任何效果。当我试图创建一个类似的Python版本的was env来做同样的事情时,我发现使用上面的he时出现了一个BrokenPipeError。然后我尝试了一个脚本,似乎是这样。而source在进程替换中并没有像预期的那样工作。这不是他正在尝试做的吗?$/aws环境导出A=b\b导出b=test导出C=this\is\A\test$printenv | egrep^[ABC]=$/aws环境$printenv | egrep^[ABC]=C=这是测试B=测试a=B