티스토리 뷰
변수 할당에 있어서 = 좌우에 공백을 허용하지 않는다!
'아니! 왜?'
다른 언어로 programming 하는 것에 비교했을 때 납득하기 힘든 제약입니다.
처음에는 당황스러웠지만 몇 분 후에 이유를 깨닫게 되죠.
변수 x 에 trauma 를 할당하기 위해 터미널에서
x = trauma
를 입력해 봅니다. ( = 주변에 공백을 줍니다.)
흠! 공백으로 인해 shell 이 x 라는 command 를 찾는군요. 자, 이번에는 공백없이 grep 이라는 변수를 만들어 보겠습니다.
잘 되는군요. 그런데, 만약 = 주변에 공백을 준다면?
하하! grep 명령으로 aaa 파일에서 = 가 있는 행을 찾아주네요.
터미널 입력에서 공백이 허용되면 = 는 command 의 인자인지 할당기호인지 구별할 수가 없겠죠.
한편, python 이나 Ruby 의 변수 정의(선언 + 할당)를 봅시다.
x = 10 # x=10 과 동일
y=10
python 은 shell 처럼 명령어 해석기가 아닙니다.
뒤에 = 가 있다면 처음에 오는 것이 변수일지 아니면 명령어인지 고민할 이유가 없겠네요.
같은 이유로 = 가 단순 문자로 이루어진 인자로 취급되는지 아니면 operator 인지 혼란스러울 이유가 없습니다.
(==, += 등은 논외)
결국, 공백의 존재 여부와 관계없이 일관되게 해석됩니다.
shell script 나 Windows 의 batch 는 터미널에서 한줄 한줄 입력할 것을 모아서 처리해 주는 것입니다.
따라서, 터미널에서 곤란한 것은 script 에서도 허용되지 않습니다.
bash programming 이 아니라 bash scripting 이라는 제목을 쓴 이유가 여기에 있습니다.
script 를 작성할 때는 terminal 에서 keyboard 로 입력하는 중이라고 생각해야겠구나!
흠! keyboard 로 입력 중이라면,
모든 변수는 문자열(string)
일 수 밖에 없다는 것을 금세 깨닫게 됩니다.
다른 언어들도 마찬가지일 겁니다. 표준입력으로 들어오는 것이 문자열 외에 있을 수가 없습니다.
그 문자열을 가공해서 integer, float 등을 만드는 것이죠.
입력으로 받아들인 변수(문자열)를 다루는 것을 shell 에서는 '변수확장(variable expansion)' 이라고 합니다.
다음 글에서는 $ 와 중괄호 { } 가 동원해서 변수를 다루는 방법을 알아보겠습니다. 더불어 globbing 도 같이 다루겠네요.
'Programming Language > Shell Programming' 카테고리의 다른 글
Bash Scripting 04 - 변수확장(2) (0) | 2022.07.14 |
---|---|
Bash Scripting 03 - Globbing (0) | 2022.07.11 |
Bash Scripting 02 - 변수확장(1) (0) | 2022.07.09 |
Bash Scripting 모르면 곤란한 것들 - if (3) (0) | 2022.07.06 |
Bash Scripting 모르면 곤란한 것들 - if (2) (0) | 2022.07.03 |
- Total
- Today
- Yesterday
- fenwick tree
- Shell Programming
- 다익스트라
- bash script
- bash
- stack
- javascript array
- 정수론
- python3
- C++ big number
- math font
- Vim
- 백준
- dynamic programming
- RUBY
- lazy propagation
- Reference
- 세그먼트 트리
- script
- segment tree
- map
- JavaScript
- nearest common ancestor
- shell
- number theory
- Aho-Corasick
- BOJ
- max flow
- persistent segment tree
- Dijkstra
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |