printf의 출력이 FORMAT 매개변수에 지정된 출력과 다릅니다.

printf의 출력이 FORMAT 매개변수에 지정된 출력과 다릅니다.

조금 혼란스럽습니다. 출력이 매개변수 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

관련 정보