어떻게든 큰 따옴표가 내 코드에 들어가 예상치 못한 동작이 발생했습니다.
#!/bin/sh
if [ foo = ‘foo’ ]; then
echo yes
else
echo no
fi
나는 이것이 yes로 울릴 것이라고 예상했지만 실제로는 no로 울려 퍼졌습니다.
답변1
조판에는 줄 바꿈 따옴표 또는 "둥근 따옴표"가 사용되며, "곧은 따옴표"는 다양한 워드 프로세싱 프로그램에 의해 자동으로 둥근 따옴표로 변경되는 경우가 많습니다. 인용된 텍스트의 방향을 지정하고 말리는 데 다소 지능적이기 때문에 "스마트 따옴표"라고도 합니다.
아래에는 다양한 인용문이 포함된 표가 있습니다.
특징 | 설명하다 | 윈도우즈/유닉스 | 애플 시스템 | 하이퍼텍스트 마크업 언어 |
---|---|---|---|---|
' | 직접 작은따옴표 | ' | ' | ' |
" | 곧은 큰따옴표 | " | " | " |
' | 작은따옴표 열기 | alt+0145 | option+] | ‘ |
' | 작은따옴표로 끝내기 | alt+0146 | option+ shift+] | ’ |
" | 큰따옴표 열기 | alt+0147 | option+[ | “ |
" | 큰따옴표 끝 | alt+0148 | option+ shift+[ | ” |
그러나 프로그래밍 언어에서는 이러한 따옴표를 서로 바꿔서 사용할 수 없습니다. 곧은 따옴표는 일반적으로 언어에서 특정 기능을 수행하는 특수 문자인 반면, 비슷하게 보이는 둥근 따옴표는 특별한 것으로 간주되지 않습니다. 대신 오류가 발생하거나 문자와 유사한 일반 문자로 취급될 수 있습니다.
따라서 이 질문의 코드 예제에서 큰 따옴표는 쉘 이스케이프 문자뿐만 아니라 리터럴 문자로 처리되므로 'foo'
일치하지 않습니다 .'‘foo’'
이 문제를 방지하려면 코드 편집용으로 설계된 프로그램에서만 코드를 편집해야 하며, 워드 프로세싱 애플리케이션(LibreOffice Word, WordPad, Email 등), PDF 문서 또는 온라인 코드 소스에서 코드를 복사할 때는 주의해야 합니다.
둥근 따옴표와 곧은 따옴표 사이의 시각적 차이는 미묘할 수 있지만 일반적으로 구별할 수 있습니다. 둥근 따옴표는 일반적으로 글꼴에 따라 기울어지거나 작은 6 또는 9와 유사합니다.
유사한 절차를 od
사용하여 일반 ASCII 곧은 따옴표와 유니코드 둥근 따옴표를 구별할 수 있습니다. 예를 들어, 다음 텍스트 파일은 “foo”
한 줄에 큰 따옴표가 있고 "foo"
다른 줄에 곧은 따옴표가 있습니다. UTF-8 로케일에서 macOS 및 GNU/Linux의 출력은 od -c
큰 따옴표가 많은 바이트를 차지하는 반면 곧은 따옴표는 많은 바이트를 가져옵니다. 1바이트만 사용하세요.
mac$ od -c test.txt
0000000 “ ** ** f o o ” ** ** \n " f o o " \n
0000020
gnu$ od -c test.txt
0000000 342 200 234 f o o 342 200 235 \n " f o o " \n
0000020
(위 이미지에서 macOS는 od
첫 번째 위치에 전체 문자를 표시하고 문자의 나머지 바이트를 표시하는 **
반면, 아래 이미지에서 GNU는 od
문자의 모든 바이트 값을 8진수로 표시합니다.)