티스토리 뷰
bash 에서 모든 변수는 '문자열' 입니다.
따라서 변수의 확장, 명령어 대치 등이 일어나지 않는다면 다음은 모두 같습니다.
name=mathtrauma
name='mathtrauma'
name="mathtrauma"
일단 누구나 짐작할 수 있는 '공백을 포함하는 문자열'을 한 묶음으로 만드는 기능 외에 따옴표는 왜 필요할까요?
1. Single Quotes
작은 따옴표로 묶인 문자열은 어떤 경우에도 확장이나 치환이 일어나지 않습니다.(No interpolation)
$(command ~) 형태를 사용하여 command 가 shell 에서 수행한 결과를 문자열로 확보할 수 있습니다.
이를 명령어 치환(command substitution) 이라고 부르나 봅니다.
위의 예에서 보듯이 $(echo ~) 는 큰 따옴표 내에서는 echo 명령의 결과로 바뀌었습니다.
하지만, 작은 따옴표 내부에서는 있는 그대로의 문자열로 유지됩니다.
기억해야 할 것은 전혀 다른 방식으로 해석될 여지가 없기에 작은 따옴표 내에서는 작은 따옴표를 쓸 수 없다는 것입니다.
2. Double Quotes
결국 주된 관심사는 큰 따옴표일 수 밖에 없습니다.
큰 따옴표 내부에서 달러기호 ' $ ' 는 변수확장, 명령어 치환등의 다양한 기능을 수행합니다.
그래서 큰 따옴표 내부에서 $ 를 문자 그대로 사용하려면 뭔가 장치가 필요합니다.
이때 등장하는 것이 Back Slash ' \ ' 입니다.
' \ ' 를 이용해서 다른 뜻으로 사용되는 것을 막는 과정을 영어로는 escape 라고 부르더군요.
$ 를 포함해서 escape 할 필요가 있는 문자는 일단 다음 정도가 있습니다. (더 있을지도...)
` , " , \ , ! , $
(1) " 와 $ 가 큰 따옴표 내에서 문자 그대로 사용되기 위해 escape 가 필요할 것은 이제 와서는 당연해 보입니다.
(2) ` : grave accent 혹은 backquote 나 backtick 으로도 불리는 기호입니다.
`command ~` 와 $(command ~) 는 같은 기능을 수행합니다.
shell 에서는 $( ) 로 인해 자주 못보고 오히려 Perl, Ruby 에서 더 자주 보는 것 같습니다.
(3) ! 는 따로 다루도록 하겠습니다.
(4) bash 에서는 일반 문자 앞에 \가 사용되면 아무 효과가 없습니다. 하지만 zsh 에서는 다르게 동작합니다.
좌측 사진이 zsh 이고 우측 사진이 bash 입니다.
3. 인용 부호 없이 공백 포함 문자열을 사용하기!
전혀 중요해 보이지는 않지만 이런 것도 있군요.
흠! 작은 따옴표나 큰 따옴표 없이 공백을 \ 로 escape 시키면 공백을 포함한 문자열처럼 보이게 만들 수 있습니다!
'Programming Language > Shell Programming' 카테고리의 다른 글
Bash Scripting 07 - if (0) | 2022.07.27 |
---|---|
Bash Scripting 05 - 변수확장 (3) (0) | 2022.07.20 |
Bash Scripting 04 - 변수확장(2) (0) | 2022.07.14 |
Bash Scripting 03 - Globbing (0) | 2022.07.11 |
Bash Scripting 02 - 변수확장(1) (0) | 2022.07.09 |
- Total
- Today
- Yesterday
- 세그먼트 트리
- lazy propagation
- shell
- script
- RUBY
- max flow
- bash
- Reference
- 백준
- math font
- fenwick tree
- persistent segment tree
- number theory
- dynamic programming
- BOJ
- javascript array
- stack
- nearest common ancestor
- bash script
- 다익스트라
- Dijkstra
- segment tree
- Vim
- 정수론
- Shell Programming
- Aho-Corasick
- C++ big number
- python3
- JavaScript
- map
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |