我正在嘗試運行這段程式碼:
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 中的 ,所以我陷入了困境。該程式碼無法運行並且存在語法錯誤。
我該怎麼辦?我也願意接受其他解決方案。
答案1
實際上,您已經在定界文件中正確放置了雙引號。但最後一個|
不是必需的,它會產生語法錯誤。
第一個參數分配給您一個額外的新行,但以下應該可以工作。使用定界文檔:
while read item; do
export environmentVariables="$environmentVariables\n$item"
done <<< "$(
cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | [.key, .value] | join("=")'
)"
相同,但使用進程替換:
while read item; do
export environmentVariables="$environmentVariables\n$item"
done < <(cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | [.key, .value] | join("=")')
<(commands)
是流程替代,命令執行的結果顯示為一個特殊的檔名,並while
透過簡單的輸入重定向傳遞給<
.
while
或者,您可以使用簡單的管道,但指示 shell在目前 shell 環境中執行其最後一個元素 ( ),從而允許保留變數值:
shopt -s lastpipe
cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | [.key, .value] | join("=")' |
while read item
do
export environmentVariables="$environmentVariables\n$item"
done
另外,如果您實際上需要變數中的換行符,而不是字面\n
字符,您只需執行以下操作:
export environmentVariables=$(
cat /LocalSecrets/EnvironmentVariables.json |
jq -r 'to_entries[] | [.key, .value] | join("=")'
)