변수에서 JSON 값을 가져올 수 없습니다.

변수에서 JSON 값을 가져올 수 없습니다.

sampleData.txt파일에 일부 데이터가 있고 이를 Base64로 변환하여 변수에 전달하려는 작은 Shell/bash 스크립트를 작성했습니다 $scriptPayload.

value=$(cat sampleData.txt)
echo "$value"
encoded= echo  $value | base64 
scriptPayload='{"scriptText":"$encoded" }'
echo "$scriptPayload"

하지만 내가 얻는 출력은 실제로 다음과 같은 변수에서 값을 가져와야 {"scriptText":"$encoded"}합니다.$encoded{"scriptText":"Test the Shell Script and its behaviour" }

제안해주세요. 나 여기 처음이야.

답변1

귀하의 스크립트에 구문 오류가 있습니다(그렇지는 않지만 확실히 귀하가 생각하는 대로 작동하지 않습니다).

encoded= echo  $value | base64 

다음과 같은 쉘을 사용한다고 bash가정합니다 .

encoded=$( base64 <<<"$value" )

심지어

encoded=$( base64 <sampleData.txt )

sampleData.txt코드의 첫 번째 줄에서 명령 대체를 encoded사용한 방식과 유사하게 명령 대체를 사용하여 파일에 있는 데이터의 Base64 인코딩을 변수로 캡처합니다 .cat

변수는 작은따옴표로 묶인 문자열로 확장되지 않으므로 코드는

scriptPayload='{"scriptText":"$encoded" }'

당신이 생각하는 대로 작동하지 않습니다( scriptPayload리터럴 string 으로 설정됨 {"scriptText":"$encoded" }).

에서는 bash다음과 같이 쓰는 것이 가장 좋습니다.

printf -v scriptPayload '{"scriptText":"%s"}' "$encoded"

또는

printf -v scriptPayload '{"scriptText":"%s"}' "$( base64 <sampleData.txt )"

printf내장 유틸리티는 bash변수로 직접 인쇄합니다 -v varname.

일부 base64유틸리티 구현에서는 CRLF 줄 끝으로 데이터를 생성할 수 있습니다.


사용 jo:

scriptPayload=$( jo scriptText=%sampleData.txt )
printf '%s\n' "$scriptPayload"

매개변수는 key 를 사용하여 JSON 객체를 생성하라고 scriptText=%sampleData.txt알려줍니다 . 키의 데이터는 파일의 base64로 인코딩된 콘텐츠여야 합니다 ( base64로 인코딩해야 하는 항목이 결정됨).joscriptTextsampleData.txt%

sampleData.txtHello World문자열(뒤에 줄 바꿈)이 포함된 파일 의 경우 다음이 출력됩니다.

{"scriptText":"SGVsbG8gV29ybGQK"}

jo명령줄이나 셸 스크립트에서 올바르게 인코딩되고 인용된 JSON 데이터를 쉽게 생성하는 도구입니다.

답변2

귀하의 인코딩 라인은 아무 작업도 수행하지 않았으므로 변경했습니다. 또한 마지막 줄을 변경 scriptPayload하고 이스케이프를 사용했습니다.

#!/bin/bash
value=5
echo $value
encoded=`echo -n "$value" | base64`
scriptPayload="{\"scriptText\":\"${encoded}\" }"
echo $scriptPayload

답변3

encoded=`base64 -w0 < sampleData.txt`
scriptPayload='{"scriptText":"'"$encoded"'" }'
echo "$scriptPayload"

위의 코드를 사용해 보세요. 변수가 평가되지 않는 이유는 변수를 작은따옴표로 묶었기 때문입니다. 변수 앞에 작은따옴표를 닫았습니다. 이런 방식으로 쉘은 변수를 인식하고 이를 실제 내용으로 대체합니다.

관련 정보