이 코드를 실행하려고 합니다.
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
그리고 다음과 같은 쉘 변수를 사용하여 읽고 추가하고 싶습니다 $environmentVariables
.
FirstKey=FirstValue
SecondKey=SecondValue
ThirdKey=ThirdValue
그러나 명령에 큰따옴표가 필요하고 루프의 현재 셸을 jq
유지하기 위해 heredoc을 사용해야 하기 때문에 막혔습니다. $environmentVariables
해당 코드는 실행되지 않으며 구문 오류가 있습니다.
어떻게 해야 하나요? 다른 솔루션도 열려 있습니다.
답변1
실제로 heredoc 내에 큰따옴표를 올바르게 배치했습니다. 그러나 마지막은 |
필요하지 않으며 구문 오류가 발생합니다.
첫 번째 매개변수 할당은 추가 줄 바꿈을 제공하지만 다음은 작동합니다. heredoc 사용:
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
현재 쉘 환경에서 마지막 요소( )를 실행하도록 쉘에 지시하여 변수 값을 보존할 수 있습니다.
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("=")'
)