Profile picture

[Linux] IFS(Internal Field Separate) 정리

JaehyoJJAng2023년 03월 15일

IFS

외부 프로그램을 실행할 때 입력되는 문자열을 나눌 때 기준이 되는 문자를 정의하는 환경 변수

터미널에서 환경변수를 출력해보면 공백문자가 출력됨을 알 수 있다

$ echo ${IFS}

IFS의 디폴트 값은 공백,탭,개행 문자이다 (" ", \t, \n)

쉘 스크립트에서 for in 문법을 보면 공백문자로 띄워진 하나의 문자열이 마치 배열처럼 하나씩 순회하는 것을 확인해 볼 수 있다

#!/bin/bash

STRING="hello bye"

for word in ${STRING}
do
  echo "word -> ${word}"
done
$ bash script.sh
word -> hello
word -> bye

IFS값이 공백이기 때문에 위 처럼 공백으로 분리된 STRING 변수의 값이 쪼개지는 것을 확인할 수 있다. 그럼 IFS의 기본 값을 바꾸면 어떻게 될까?

#!/bin/bash

IFS_BAK=${IFS} # 기존 IFS 설정 값을 IFS_BAK 이라는 변수에 백업해놓자
STRING="hello bye"

for word in ${STRING}
do
  echo "word -> ${word}"
done
$ bash script.sh
word -> hello bye

단어를 쪼개는 기준이 되는 문자가 공백에서 ":"로 바뀌었기 때문에, 위 결과처럼 하나의 문자열로 출력되었다

IFS 기본 값이 ":"인 상황에서 단어를 쪼갤 수 있는 방법은 아래와 같이 수정하는 수 밖에 없다

STRING="hello:bye"

그러면 첫번째 예시의 결과와 같이 단어가 쪼개져서 출력이 될거다


Loading script...