명령 1:
$ rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }
"Couldn't delete hello.txt"
명령 2
$ rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }
Couldn't delete hello.txt
노트: hello.txt
현재 디렉터리에 존재하지 않습니다.
답변1
첫 번째 명령
rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }
<U+201C>
(왼쪽 큰따옴표), <U+2019>
(오른쪽 작은따옴표) 및 (오른쪽 큰따옴표) 문자를 포함합니다. 이러한 문자 <U+201D>
는 쉘에 대해 특별한 내용이 없으며 그대로 출력됩니다.
두 번째 순서
rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }
작은따옴표로 묶인 문자열을 포함합니다. 와 n
사이의 문자 는 셸에 특별하지 않습니다.t
<U+2019>
답변2
이 쌍 “”
은스마트 견적. 마찬가지로 귀하의 ’
in은 Couldn’t
현명한 인용문입니다.
일반적인 명언과는 다르기 때문에곱슬인용된 부분의 시작과 끝을 구별하세요.전부는 아니더라도 대부분의 프로그래밍/스크립팅 언어에서는 의미가 없습니다.다른 유니코드 문자와 동일하게 작동한다는 것을 알고 있습니다.
따라서 첫 번째 항목에는 echo
실제로 참조가 없으며 명령은 다음 단어를 수신합니다.별도의 매개변수로. 쉽게 확인할 수 있어요
$ for s in “Couldn’t delete hello.txt”; do echo $s; done
“Couldn’t
delete
hello.txt”
$ for s in 'Couldn’t delete hello.txt'; do echo $s; done
Couldn’t delete hello.txt
실제로출력이 잘못되었습니다(실제로 복사하여 붙여넣었나요?) 둥근 따옴표가 에 있으므로 echo
출력은 위의 예와 같이 여전히 둥근 따옴표여야 합니다.
보시다시피 두 번째 경우는하나의문자열에 ASCII 범위 밖의 유니코드 문자가 포함되어 있으므로 따옴표는 셸에서 제거됩니다.