#!/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 Scripts
의 IFS
(Internal Field Separator) 환경 변수의 문제로, 디폴트 IFS
는 변수 내의 모든 tab
, space
, newline
를 모두 whitespace
로 인식한다.
따라서 ls_output
변수에는 여전히 newline
문자가 존재하므로 출력 방식을 변경하여 위 문제를 해결할 수 있다.
가장 단순한 방법은 출력 직전에 IFS
를 백업하고 초기화한뒤, 다시 복구하는 것이다.
#!/bin/bash
ls_output=$(ls -alh)
BACKUP_IFS="$IFS"
IFS=""
echo $ls_output
IFS=$BACKUP_IFS
그럼 위와 같이 newline
문자를 보존하여 출력할 수 있게 된다.
[사이트] https://www.baeldung.com/linux/variable-preserve-linebreaks