2017-01-18 7 views
0

문자열의 md5 해시를 생성하는 bash 스크립트를 만들고 싶습니다. 문자열에는 특수 문자와 공백이 포함될 수 있습니다. 그러한 문자열을 예를 들어 읽을 수있는 방법은 무엇입니까? md5sum?Bash : 특수 문자로 문자열의 md5 해시 생성

나는 "md5.sh"로 다음과 같은 스크립트를 작성했습니다 :

#!/bin/bash 
echo -n $1 | md5sum | awk '{print $1}' 

하지만 난이 (마지막에 공백) "./md5.sh"를 사용하는 경우이 인식되지 않습니다. 인용 부호는 스크립트에서 읽을 수 없습니다. 그리고 하나는 "

희망 누군가가 나를 도울 수 ... 프롬프트 종료됩니다 :)

+0

'single '은 프롬프트에서 끝납니다'- 스크립트의 인수를 인용해야합니다. 그래서 ./md5.sh' " ''(두 개의 작은 따옴표 안의 큰 따옴표) 올바른 응답을 얻을 수 있습니다 . 공백을 포함하는 모든 문자열에 동일하게 적용됩니다. – arco444

답변

1

첫째, 당신은 printf를 스크립트의 매개 변수를 인용 (그리고 사용할 필요가, 세상은 더 좋은 곳이 될 것입니다 사람들이 잊어 버린 경우 echo가) 존재 :

printf '%s' "$1" | md5sum | awk '{print $1}' 

둘째, 인수로 실제 공간을 통과, 쉘이 폐기되지 않도록뿐만 아니라 인용해야합니다

./md5.sh " " 
+0

고마워요, 공백으로 작동하지만 다른 특수 문자는 어때요? 예 : './md5.sh' '' '또는'./md5.sh' ' "'. 그러나 문자열에 작은 따옴표와 큰 따옴표가 모두 포함되어있는 경우 – Epyx

+0

두 개의 따옴표 유형이 포함 된 경우, 역 슬래시 (\)로 이스케이프 처리해야합니다. ' "\" "'는 작은 따옴표와 큰 따옴표로 구성된 문자열입니다. 작은 따옴표 안에는 이스케이프 된 작은 따옴표 (''\ '''는 유효한 문자열이 아니거나 따옴표 붙은 백 슬래시 다음에 닫히지 않은 작은 따옴표가 포함됨)를 포함 할 수 없습니다.하지만 'bash'는 또 다른 형식을 제공합니다 인용 부호는 이스케이프 된 작은 따옴표를 허용합니다 :'$ '\' ''. – chepner