[Bash] echo 출력 결과에서 개행이 누락되는 문제

문연수·2022년 6월 2일
0

Bash

목록 보기
1/2

1. Examples

#!/bin/bash
# test.sh
ls_output=$(ls -alh)
echo $ls_output

 위에서 작성한 test.sh 스크립트를 실행하게 되면 아래와 같은 결과가 출력된다:

total 12K drwxr-xr-x 2 mythos mythos 4.0K Jun 2 04:16 . drwxr-xr-x 14 mythos mythos 4.0K Jun 2 04:16 .. -rwxr-xr-x 1 mythos mythos 50 Jun 2 04:16 test.sh

ls -alh 명령 실행 결과에서 개행 문자가 모두 공백 문자로 치환되는 것을 볼 수 있다.

 이는 Bash ScriptsIFS (Internal Field Separator) 환경 변수의 문제로, 디폴트 IFS 는 변수 내의 모든 tab, space, newline 를 모두 whitespace 로 인식한다.

 따라서 ls_output 변수에는 여전히 newline 문자가 존재하므로 출력 방식을 변경하여 위 문제를 해결할 수 있다.

2. Preserve Linebreaks

 가장 단순한 방법은 출력 직전에 IFS 를 백업하고 초기화한뒤, 다시 복구하는 것이다.

#!/bin/bash
ls_output=$(ls -alh)

BACKUP_IFS="$IFS"

IFS=""
echo $ls_output

IFS=$BACKUP_IFS

그럼 위와 같이 newline 문자를 보존하여 출력할 수 있게 된다.

Reference

[사이트] https://www.baeldung.com/linux/variable-preserve-linebreaks

profile
2000.11.30

0개의 댓글