약간 혼란스럽습니다. 의 출력이 인수 printf
에 지정된 것과 다릅니다 FORMAT
.
$ echo "$PWD_HASH"
{SHA512-CRYPT}$6$ZLgRL2DZSKYUCzht$PaTcpkoOi6P6p9ItIjRTL00MCB/8IU.fJbGk9EO/LxUAgZwGASO6qXNSNSzxQRBGjNiPpiArgwOacZSG5A6FL1
$ PWD_JSON=$(printf '{"password": "%s"}' "$PWD_HASH")
$ echo "$PWD_JSON"
"}password": "{SHA512-CRYPT}$6$ZLgRL2DZSKYUCzht$PaTcpkoOi6P6p9ItIjRTL00MCB/8IU.fJbGk9EO/LxUAgZwGASO6qXNSNSzxQRBGjNiPpiArgwOacZSG5A6FL1
어떻게 왜? 원하는 출력을 얻는 방법은 무엇입니까?
변수에서가 아니라 문자열을 직접 전달하면 예상되는 출력을 얻습니다.
$ PWD_JSON=$(printf '{"password": "%s"}' '{SHA512-CRYPT}$6$ZLgRL2DZSKYUCzht$PaTcpkoOi6P6p9ItIjRTL00MCB/8IU.fJbGk9EO/LxUAgZwGASO6qXNSNSzxQRBGjNiPpiArgwOacZSG5A6FL1')
$ echo "$PWD_JSON"
{"password": "{SHA512-CRYPT}$6$ZLgRL2DZSKYUCzht$PaTcpkoOi6P6p9ItIjRTL00MCB/8IU.fJbGk9EO/LxUAgZwGASO6qXNSNSzxQRBGjNiPpiArgwOacZSG5A6FL1"}
허용되는 답변을 보완하기 위해 여기 PWD_HASH
내 docker exec -t
. 분명히 에서 사용하는 줄 끝은 TTY
( CRLF
) \r\n
이므로 예상치 못한 결과가 발생합니다 \r
.
답변1
변수에는 문자열 끝에 마지막 두 문자를 출력 시작 부분으로 이동하는 PWD_HASH
캐리지 리턴이 포함되어 있습니다 .\r
"}
예:
$ PWD_HASH='{SHA512-CRYPT}abcde'$'\r'
$ PWD_JSON=$(printf '{"password": "%s"}' "$PWD_HASH")
$ echo "$PWD_HASH"
{SHA512-CRYPT}abcde
$ echo "$PWD_JSON"
"}password": "{SHA512-CRYPT}abcde
$ echo "$PWD_JSON" | od -c
0000000 { " p a s s w o r d " : " { S
0000020 H A 5 1 2 - C R Y P T } a b c d
0000040 e \r " } \n
0000045