티스토리 뷰

변수 할당에 있어서 = 좌우에 공백을 허용하지 않는다!

 

'아니! 왜?'

 

다른 언어로 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 도 같이 다루겠네요.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함