Bash: 행 배열에 대한 stdout 명령(공간 문제)

Bash: 행 배열에 대한 stdout 명령(공간 문제)

상황: 명령 출력을 배열에 저장해야 합니다. 각 행은 하나의 요소입니다. 줄에 공백이 포함되어 있어 모든 것이 엉망이 될 수 있습니다.

일반적으로 나는 그런 일을 할 것입니다 ARRAY=($(command)). 그러나 이와 같은 작업을 수행하려고 하면 ARRAY=($(printf '%s\n' "first line" "second line"))배열이 다음과 같이 보일 것입니다.

$ for x in "${ARRAY[@]}"; do echo $x; done
first
line
second
line

비록 조금 추악하긴 하지만 내가 원하는 동작을 달성할 수 있는 방법을 찾았습니다.

$ readarray -t ARRAY < <(printf '%s\n' "first line" "second line")
$ for x in "${ARRAY[@]}"; do echo $x; done
first line
second line

이 작업을 수행하는 더 좋은 방법을 아는 사람이 있나요? 내가 뭐 놓친 거 없니?

답변1

readarray/ mapfile이것하지만 이 기능은 bash v4에 추가되었으므로 해당 기능이 없는 시스템(macos)을 사용하는 경우 훨씬 더 "추악한" 방식으로 수행할 수 있습니다.

IFS=$'\n' array=($(printf '%s\n' "first line" "second line"))

아니면 더 추악한 방법으로:

while IFS= read -r line; do 
    array+=("$line")
done < <(printf '%s\n' "first line" "second line")

관련 정보