쉘에서 따옴표 안에 같은 종류의 따옴표 넣기
dev | 2017-07-16
메일건 API로 메일을 사용하고 있는데 따옴표가 붙은 문자열은 잘려서 수신이 안됐다. 따옴표 처리가 누락됐으니 간단히 처리할 수 있겠거나 생각했다. 하지만 생각처럼 쉽지 않았다.
조금 다른 삽질 얘기를 먼저 붙이자면, 보통 디버깅을 할 때 error_log
로 값을 찍어보면서 하는데 echo
로 찍는 값과 error_log
출력 값이 다르다. error_log
에 출력될때는 어디선가 슬래시를 추가해서 출력한다. 슬래시가 어디서 추가됐는지 알 수가 없어서 한참을 헤맸다.
본론으로 들어가서 API를 호출하는 curl
구문에 내가 아는 다양한 방법으로 슬래시를 붙여봤는데 제대로 나오지 않았다. 뭔가 다른 방법이 있나 찾아봤더니 홑따옴표를 '\''
로 변환을 해줘야 한다고 한다. 아무리 뚫어지게 봐도 저 구문이 어떻게 만들어지는지 알 수가 없었다. 그래서 본격적으로 찾아봤는데 '"'"'
이렇게 변환해야 한다는 글도 찾아볼 수 있었다.
이 이유는 curl
때문이 아니라 쉘에서 따옴표를 독특한 방법으로 처리하기 때문인데 쉘스크립트 인용부호의 모든 것을 보고 이해할 수 있었다. 쉘에서 따옴표를 출력하는 방법이 다양한데 echo \'
와 같은 뭔가 완성되지 않은 것 같은 구문으로 따옴표를 출력할 수 있다. 그래서 먼저 홑따옴표를 출력하기 위해 \'
를 사용하고 그 다음에 스트링 중간을 잘라서 따옴표를 넣기 위해 앞뒤에 따옴표를 추가한다. 보통은 스트링을 붙일 때 +나 .과 같은 연산자를 사용하는데 쉘은 없어도 된다. 그래서 결과적으로 저런 이해하기 힘든 구문이 나온 것이다.
좀 더 자세하고 일반적인 설명은 UNIX SHELL Quote Tutorial에 잘 되어 있다.
Comments