IFS : 내부 필드 구분 문자
tree.sh
#!/bin/bash
list_recursive ()
{
local filepath=$1
local indent=$2
# 들여쓰기를 적용하고 파일 이름만 추출하여 출력
echo "${indent}$filepath##*/}"
if [ -d "$filepath" ] ; then
local fname
for fname in $(ls "$filepath")
do
# 들여쓰기를 위한 공백을 추가하여 재귀 호출
list_recursive "${filepath}/${fname}" " $indent"
done
fi
}
list_recursive "$1" ""
- 파일 이름에 공백이 포함된 경우
# (1)
$ ls -l ~/test
list.txt
space file.txt
work.txt
# (2) 배시가 공백을 기준으로 단어를 구분
$ ./tree.sh ~/text
text
list.txt
space
file.txt
work.txt
- IFS의 값에서 공백을 없애는 방법 → 작은따옴표 내에 개행 입력으로 IFS에 설정
# ... 생략 ...
IFS='
'
for fname in $(ls "$filepath")
do
# ... 생략 ...
- 혹은
IFS=$'\n'
- 결과
$ ./tree.sh ~/text
text
list.txt
space file.txt
file.txt
work.txt
- IFS 값을 바꾸면 이후 실행하는 다른 명령어에도 영향을 미치기 때문에 환경 변수의 값을 바꾸기 전에 기존 값을 백업해 두고 처리가 끝난 후 원래의 값으로 돌려놓는 것이 좋음
_IFS=$IFS # IFS 값 복원
IFS=$'\n' # IFS에 개행만 설정
# ... (처리) ...
IFS=$_IFS # IFS 값 복원
'books > Linux' 카테고리의 다른 글
[모두의 리눅스] 소프트웨어 패키지 (0) | 2024.08.21 |
---|---|
[모두의 리눅스] 셸 스크립트 (4) 검색 명령어 (0) | 2024.08.09 |
[모두의 리눅스] 셸 스크립트 (1) (0) | 2024.08.08 |
[모두의 리눅스] 표준 입출력과 파이프라인 (0) | 2024.07.31 |
[모두의 리눅스] 프로세스와 잡 (0) | 2024.07.30 |