![bash에서 두 변수의 내용은 동일하지만 길이가 다르다는 것을 알 수 있습니다.](https://linux55.com/image/146423/bash%EC%97%90%EC%84%9C%20%EB%91%90%20%EB%B3%80%EC%88%98%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%80%20%EB%8F%99%EC%9D%BC%ED%95%98%EC%A7%80%EB%A7%8C%20%EA%B8%B8%EC%9D%B4%EA%B0%80%20%EB%8B%A4%EB%A5%B4%EB%8B%A4%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EC%95%8C%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 2개의 변수는 동일한 표시 내용을 갖습니다.
x_sign1="aabbccdd_and_somthing_else"
var1="...."
[........]
x_sign2=$(echo -n "${var1}${var2}${var3}" | shasum -a 256)
echo $x_sign2
====>
aabbccdd_and_somthing_else -
끝에 "-"를 주목하세요.
그러나 길이는 다양합니다. x_sign2
개행 문자가 포함되어 있지 않더라도 마찬가지입니다 . 이를 보장하려면:
x_sign22=$(echo -n "${var1}${var2}${var3}" | shasum -a 256 | tr -d '\n')
하지만:
echo ${#x_sign1}
====> 64
And:
그리고:
echo ${#x_sign2}
====> 67
echo ${#x_sign22}
====> 67
차이점은 3개의 기호입니다. 보이는 내용은 동일합니다.
또한 해당 서명 값이 필요한 REST API에 컬을 통해 요청하면 "서명 오류" 없이 x_sign1
항상 성공합니다 .x_sign2
왜? 이 문제를 어떻게 해결하나요?
답변1
$ echo foo |shasum -a 256
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c -
^^
있습니다.둘출력에서 shasum
파일 이름 앞에 공백이 있습니다 . 표준 입력에서 입력을 받을 때 shasum
대시를 파일 이름으로 인쇄합니다.
실행하면 echo foo | shasum | od -c
확인하고 끝에 개행 문자가 표시되는 것을 볼 수 있습니다. 그러나 개행 문자는 명령 대체를 통해 제거되므로 이를 제거해도 명시적으로 tr
아무 작업도 수행되지 않습니다. (바라보다여기그리고여기)
두 개의 공백과 대시는 계산에 차이를 일으키는 세 문자입니다.
해시만 얻으려면 매개변수 확장을 사용하여 다음과 같이 첫 번째 공백 뒤의 모든 항목을 제거할 수 있습니다.
$ h=$(echo foo | shasum -a 256)
$ h=${h%% *}
$ printf ">%s<\n" "$h"
>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c<
${var%%pattern}
값으로 확장 var
하고 일치하는 가장 긴 접미사를 제거합니다 pattern
.