상황: 명령 출력을 배열에 저장해야 합니다. 각 행은 하나의 요소입니다. 줄에 공백이 포함되어 있어 모든 것이 엉망이 될 수 있습니다.
일반적으로 나는 그런 일을 할 것입니다 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")