我正在尝试运行此代码:
while read Item; do
export environmentVariables="$environmentVariables\n - $Item"
done <<< "$(
cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | "\(.key)=\(.value)"' |
)"
我有一个简单的 JSON 文件,位于/LocalSecrets/EnvironmentVariables.json
. 这是一个简单的键/值对 JSON 对象:
{
"FirstKey": "FirstValue",
"SecondKey": "SecondValue",
"ThirdKey": "ThirdValue"
}
我想使用它来阅读它jq
并将它们全部附加到一个shell变量中$environmentVariables
,例如:
FirstKey=FirstValue
SecondKey=SecondValue
ThirdKey=ThirdValue
但是由于jq
在它的命令中需要双引号,并且我需要使用heredoc来保存$environmentVariables
循环中的当前shell,所以我被卡住了。该代码无法运行,并且存在语法错误。
我应该怎么办?我也对其他解决方案持开放态度。
实际上,您已在 heredoc 中正确放置了双引号。但最后一个
|
不是必需的,它会产生语法错误。第一个参数分配给你一个额外的新行,但以下应该工作。使用heredoc:
相同,但使用进程替换:
<(commands)
是进程替换,命令执行的结果显示为一个特殊的文件名,并通过while
简单的输入重定向传递给<
。或者,您可以使用简单的管道,但指示 shell
while
在当前 shell 环境中执行其最后一个元素 ( ),从而保留您的变量值:此外,如果您的变量中确实需要换行符,而不是字面上的
\n
字符,您只需执行以下操作: