Bash Shall Script Word Splitting(단어분할)

이번 블로그에서는 Shall Script 명령어 해석에 있어서 단어분할(Word Splitting)의 중요성에 대해서 설명해 드리겠습니다.


단어 분할은 명령어 라인이 어떻게 해석되는지에 매우 중요한 영향을 미칠수 있습니다. 단어 분할은 비인용 상태(unquoted)에서만 수행되는데, 3가지의 경우에 적용 됩니다.


1) 파라미터 확장(Parameter expansions)

- 변수나 파라미터의 값이 확장될 때, 이 값들 사이의 공백을 기준으로 단어 분할이 발생할 수 있습니다.


2) 명령어 치환(Command substitutions)

- 다른 명령어의 출력을 현재 명령어의 일부로 사용할 때, 출력된 텍스트에서 단어분할이 발생 할수 있습니다.


3) 산술 확장(Arithmetic expansions)

- 산술 연산 결과를 처리할 때, 결과 값이 포함된 공백을 기준으로 단어 분할이 일어날수 있습니다.


* 단어분할(Word Splitting)이란?

 단어 분할은 쉘에서 명령어를 처리할때 공백(space), 탭(tab), 새라인("\n") 등의 기준으로 문자열을 여러 단어로 나누는 과정 입니다. 이 과정은 명령어의 인수나 파라미터를 구분하는데 중요한 역할을 합니다. 이때 Ubuntu(Linux)에서 기본 구분자는 IFS가 사용됩니다. 


* IFS(Internal Field Separator)란?

IFS는 쉘 스크립트 내에서 단어를 구분하는 데 사용되는 문자 집합을 정의하는 환경변수 입니다.

기본값 : 기본적으로 IFS는 공백(Space), 탭(tap) 그리고 개행 문자(newline)을 포함합니다.


사진1) echo로 IFS문자 출력

사진1과 같이 IFS문자를 출력할려고 하면 빈 화면이 나온다. 이는 공백(Space), 탭(tap) 그리고 개행 문자(newline)들이 모두 보이지 않는 문자이기 때문에 그렇다. 


사진2) echo로 보이는 IFS문자 출력

사진2와 같이 IFS문자를 보이게 변경하였다. 여전히 공백(Space)는 보이지 않지만 탭('\t') 와 개행문자('\n')가 보인다.



이제 실제적으로 단어분할을 이용하여 작업을 진행하도록 하겠습니다.

사진3) number를 변수로 저장

사진4) number로 여러 파일 생성

사진3번에서 number에 문자열 "1 2 3 4 5"를 저장하였다. 이후 사진 4와 같이 "touch" 명령어를 이용하여 number의 문자열 기준으로 파일을 생성했다. 이때 단어분할 법칙이 적용이 되서 1 ~ 5 개의 파일이 생성된 것을 볼수 있다.


사진5) number로 하나 파일 생성

사진5번은 양쪽에 큰따옴표로 감싸고 있습니다. 이는 number의 값이 "1 2 3 4 5"이지만 큰따옴표가 감싸고 있어서 공백 또한 하나의 단어로 취급합니다.


사진6) , 로 구분하여 이용하여 파일 생성

스페이스(Space)를 구분자로 사용한 것과 달리 이번에는 ","를 이용하여 구분하였다. 하지만 기본 IFS에 들어있는 문자열이 아니기 때문에 설사 큰따옴표를 사용하지 않고 실행했다 하더라도 하나의 문자로만 인식하고 한개의 파일만 만들었다.


사진7) IFS를 재설정후 파일 생성

만약 ","를 단어 구분자로 사용한다면 사진7 처럼 IFS값을 변경하면 됩니다. 이후 5개의 파일이 생성된 것을 알수 있습니다.


IFS의 값을 이전과 같이 할려면 IFS=" \t\n"를 터미널에 입력하면 됩니다.

사진8) IFS값을 default으로 변경


댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)