Bash
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
我有來自docker exec -t
.TTY
顯然,由CRLF
( )使用的行尾\r\n
,因此出乎意料\r
…
您的變數在字元串末尾
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