쉘스크립트 설명에 인용부호를 빼먹을 수는 없지요.
명령 프롬프트에 남길 수 있는 인용부호가 세 종류나 되기 때문에 꼭 짚고 넘어가야 합니다.
작은 따옴표, 큰 따옴표, 역 따옴표.
위의 따옴표 삼형제는 쓰임이 모두 다릅니다.
각각의 인용부호에 대한 정의를 분명하게 확인하지 않으면 낭패볼 일이 있을지도 모릅니다.
화면에 스트링을 출력하기 위해서는 echo 명령어를 이용합니다.
$ echo string
string
$ echo "string"
string
echo에 큰 따옴표를 하든 하지않든 모두 string을 출력해줍니다.
하지만 큰 따옴표를 출력하려면 어떻게 해야할까요?
위의 두 번째 예에서 큰 따옴표가 출력되지 않은 것은 확인했습니다.
큰 따옴표를 출력하기 위해서는 아래 세 가지 중 하나를 택하면 됩니다.
$ echo "\""
"
$ echo \"
"
$ echo '"'
"
역슬래시를 사용하여 큰 따옴표를 출력하거나,
작은 따옴표로 큰 따옴표를 감싸서 출력할 수도 있네요.
그러면 바로 위의 예에서 쓰인 백슬러시는 어떻게 출력해야하는 것일까요?
백슬러시도 위와 유사한 방법으로 출력하면 됩니다.
$ echo "\\"
\
$ echo \\
\
$ echo '\'
\
위의 예에서 알 수 있는 사실이 있습니다.
작은 따옴표로 감싸진 문자열은 변화없이 그대로 출력됩니다.
설사 큰 따옴표 자신이나 백슬래시라 할지라도 문자변환 없이 작은 따옴표 안에 있는 모습 그대로입니다.
이제 작은 따옴표를 출력해보겠습니다.
작은 따옴표는 아래 두 가지 방식으로 출력할 수 있습니다.
$ echo \' # echo \"와 유사
'
$ echo "'" # echo '"'와 유사하고 echo "\""와도 유사
'
먼저 언급한 큰 따옴표의 출력과 유사하지만 하나 다른 점이 있습니다.
바로 큰 따옴표와 역슬래시 조합이 없네요.
위의 조합으로 출력하면 아래와 같은 결과가 나옵니다.
$ echo "\'"
\'
분명 echo "'"와 "\'" 둘 중 하나를 선택해서 '를 출력하게 결정해야 했겠지요.
그 중에 가장 경제적인 선택을 했을겁니다.
그래서 "'"가 '를 나타내는 것으로 확정했으리라 추정하고 있습니다.
하지만, 제 소견으로 생각하건데,
어쩌면 논리적으로는 "\'"를 선택했어야하지 않았을까란 생각도 듭니다..
작은 따옴표는 작은 따옴표 안에 있는 것을 가급적 그대로 출력합니다.
변수를 작은 따옴표 내에서 출력하면 변수명 그대로 출력이 됩니다.
$ echo '$HOME'
$HOME
이에 반해 변수를 큰 따옴표 안에 넣으면 변수가 실제 값으로 치환된 후 출력됩니다.
$ echo "$HOME"
/home/storycompiler
역 따옴표는 따옴표 안에 있는 명령문의 실행하여 실행결과를 대입합니다.
$ echo The working directory is `pwd`
The working directory is /home/storycompiler
$ echo "The working directory is `pwd`"
The working directory is /home/storycompiler
위처럼 `pwd`의 결과값이 나옵니다.
하지만, 아래의 경우에서는 역따옴표가 제대로 동작하지 않아 의도한 값이 출력되지 않습니다.
$ echo 'The working directory is `pwd`'
The working directory is `pwd`
$ echo 'The working directory is \`pwd\`'
The working directory is \`pwd\`
$ echo "The working directory is \`pwd\`"
The working directory is `pwd`
역따옴표는 역따옴표 자체를 사용해야 의미가 있습니다.
백슬래시로 역따옴표를 막는다면 제대로 동작하지 않겠죠.
간단하게 인용부호를 살펴봤습니다.
그럼 좋은 하루 보내세요~
끝_
* References
'IT' 카테고리의 다른 글
[GCC/Linux] warning: suggest parentheses around assignment used as truth value [-Wparentheses]는 무엇? (0) | 2015.07.22 |
---|---|
[Ubuntu/Linux] ssh 공개키의 모든 것 (96) | 2015.07.19 |
[Ubuntu/Linux] 자바(Java, JRE 1.8.0) - 톰캣8(tomcat8) - OpenGrok 연결하기 (30) | 2015.07.18 |
[Ubuntu/Linux] 쉘스크립트 expr의 모든 것 (4) | 2015.07.15 |
[Ubuntu/Linux] 쉘스크립트 변수의 모든 것 (0) | 2015.07.14 |
[Ubuntu/Linux] 쉘스크립트 패턴의 모든 것 (0) | 2015.07.12 |
[Ubuntu/Linux] 쉘스크립트 test 명령문의 모든 것 (0) | 2015.07.11 |
[Ubuntu/Linux] 쉘스크립트 Flow control - for, case 문법의 모든 것 (0) | 2015.07.10 |
[Ubuntu/Linux] 쉘스크립트 Flow control - while, until 문법의 모든 것 (0) | 2015.07.09 |
[Ubuntu/Linux] 쉘스크립트 Flow control - if 문법의 모든 것 (0) | 2015.07.08 |