조금 혼란스럽습니다. 출력이 매개변수 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
경우에는 from 을 사용했습니다 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