Die Ausgabe von printf weicht von der im FORMAT-Argument angegebenen Ausgabe ab.

Die Ausgabe von printf weicht von der im FORMAT-Argument angegebenen Ausgabe ab.

Ich bin etwas verwirrt, die Ausgabe printfist anders als im FORMATArgument angegeben:

$ 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

Wie/warum? Wie erhalte ich das gewünschte Ergebnis?

Wenn ich den String direkt übergebe (nicht aus der Variable), dann bekomme ich die erwartete Ausgabe:

$ 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"}

Nur um die akzeptierte Antwort zu ergänzen, hier in meinem PWD_HASHhabe ich eine Ausgabe von . Anscheinend werden docker exec -tvon verwendete Zeilenenden verwendet ( ), daher das Unerwartete ...TTYCRLF\r\n\r

Antwort1

Ihre Variable enthält am Ende der Zeichenfolge PWD_HASHeinen Wagenrücklauf , der die letzten beiden Zeichen an den Anfang der Ausgabe verschiebt.\r"}

Beispiel:

$ 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

verwandte Informationen