변환 처리_05 작은따옴표 안에서 작은따옴표 쓰기

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

명령어: echo
키워드: 문자열, 큰따옴표, 작은따옴표
사용처: 작은따옴표로 둘러싼 문자열 안에서 변수 확장이나 작은따옴표 기호를 사용하고 싶을 때


실행예제

$ ./single-quote.sh
It costs $100? I can't believe it!

스크립트

#!/bin/sh

price=100
str='It costs $'$price'? I can'\''t believe it!'  #----- 1

   

해설

이 스크립트는 셸 변수 str 내용을 echo 명령어로 표시합니다. 변수 str에 대입할 때 문자열 전체를 작은따옴표로 둘러싸고 있는데 거기에 셸 변수 price 확장이나 작은따옴표 기호 자체를 다루는 예제입니다.

셸 스크립트로 문자열을 다룰 때 큰따옴표와 작은따옴표를 사용합니다. 기본적인 문법이지만 헛갈리기 쉬우므로 기본적인 부분을 다시 확인해 봅니다.

큰따옴표로 둘러싼 문자열은 변수 확장과 명렁어 치환을 하기 때문에 $와 `(그레이브)는 따옴표 안에서도 변수 확장과 명렁어 치환 의미를 그대로 가집니다. 한편, 작은따옴표 기호는 단순한 따옴표로 변수 확장 등을 전혀 하지 않은 채 ‘(작은따옴표) 이외의 기호를 전부 그대로 출력합니다.

  • 작은따옴표라면 확장/치환을 하지 않음

    $ echo "My Terminal : $TERM"
    My Terminal : xterm
    
    $ echo 'My Terminal : $TERM'
    My Terminal : $TERM
    

그럼 큰따옴표 안에서 큰따옴표를 쓰려면 \ 기호로 큰따옴표를 이스케이프합니다.

str="He said \"Hello!\". I said \"Hello\"."
echo $str

하지만 큰따옴표가 많은 문자열이라면 매번 이스케이프하는 것도 힘듭니다. 그럴 때는 다음처럼 작은따옴표로 처리하면 편리합니다.

str='He said "Hello!". I said "Hello".'
echo $str

그러나 작은따옴표 안에서는 변수 확장이 되지 않습니다. 이 예제는 ‘큰따옴표가 많이 등장하므로 작은따옴표로 문자열을 다루고 싶지만 변수를 확장하거나 작은따옴표를 쓰고 싶을 때’ 사용하면 됩니다.

작은따옴표를 쓰면서 변수를 확장하는 1에서는 ‘It costs $’로 우선 작은따옴표를 끊습니다. 그 다음에 $price는 작은따옴표 밖이므로 변수 확장됩니다. 이어서 다시 작은따옴표를 열고 문자열을 연결합니다. 또한, 작은따옴표를 그대로 출력하기 위해 1에서 ‘'‘라고 작성합니다. 이것은 우선 작은따옴표를 닫고 '로 작은따옴표 기호 자체를 표시한 다음 작은따옴표를 연다는 의미입니다.

이렇게 하면 작은따옴표 안에서도 변수 확장이나 작은다옴표 기호를 다룰 수 있습니다.