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로 인코딩해야 하는 항목이 결정됨).jo
scriptText
sampleData.txt
%
sampleData.txt
Hello 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"
위의 코드를 사용해 보세요. 변수가 평가되지 않는 이유는 변수를 작은따옴표로 묶었기 때문입니다. 변수 앞에 작은따옴표를 닫았습니다. 이런 방식으로 쉘은 변수를 인식하고 이를 실제 내용으로 대체합니다.