쉘에서 따옴표 안에 같은 종류의 따옴표 넣기

dev | 2017-07-16

메일건 API로 메일을 사용하고 있는데 따옴표가 붙은 문자열은 잘려서 수신이 안됐다. 따옴표 처리가 누락됐으니 간단히 처리할 수 있겠거나 생각했다. 하지만 생각처럼 쉽지 않았다.

조금 다른 삽질 얘기를 먼저 붙이자면, 보통 디버깅을 할 때 error_log로 값을 찍어보면서 하는데 echo로 찍는 값과 error_log 출력 값이 다르다. error_log에 출력될때는 어디선가 슬래시를 추가해서 출력한다. 슬래시가 어디서 추가됐는지 알 수가 없어서 한참을 헤맸다.

본론으로 들어가서 API를 호출하는 curl구문에 내가 아는 다양한 방법으로 슬래시를 붙여봤는데 제대로 나오지 않았다. 뭔가 다른 방법이 있나 찾아봤더니 홑따옴표를 '\''로 변환을 해줘야 한다고 한다. 아무리 뚫어지게 봐도 저 구문이 어떻게 만들어지는지 알 수가 없었다. 그래서 본격적으로 찾아봤는데 '"'"'이렇게 변환해야 한다는 글도 찾아볼 수 있었다.

이 이유는 curl 때문이 아니라 쉘에서 따옴표를 독특한 방법으로 처리하기 때문인데 쉘스크립트 인용부호의 모든 것을 보고 이해할 수 있었다. 쉘에서 따옴표를 출력하는 방법이 다양한데 echo \'와 같은 뭔가 완성되지 않은 것 같은 구문으로 따옴표를 출력할 수 있다. 그래서 먼저 홑따옴표를 출력하기 위해 \'를 사용하고 그 다음에 스트링 중간을 잘라서 따옴표를 넣기 위해 앞뒤에 따옴표를 추가한다. 보통은 스트링을 붙일 때 +나 .과 같은 연산자를 사용하는데 쉘은 없어도 된다. 그래서 결과적으로 저런 이해하기 힘든 구문이 나온 것이다.

좀 더 자세하고 일반적인 설명은 UNIX SHELL Quote Tutorial에 잘 되어 있다.

Comments

Post a comment

:

: 공개 되지 않습니다. Gravatar를 표시 합니다.

:

: HTML 태그를 사용할 수 없습니다.