나는 다음과 같은 것을 성취하고 싶습니다:
list=()
while read i; do
list+=("$i")
done <<<"$input"
그리고
IFS=$'\n' read -r -a list <<<"$input"
내가 뭘 잘못했나요?
input=`/bin/ls /`
IFS=$'\n' read -r -a list <<<"$input"
for i in "${list[@]}"; do
echo "$i"
done
목록이 인쇄되어야 /
하지만 첫 번째 항목만 가져옵니다.
답변1
답변2
bash
지원되지 않는 버전의 경우mapfile
IFS=$'\n' read -ra list -d '' <<< "$input"
문제를 해결해야 한다
답변3
Bash 버전 3(및 4)용 솔루션
저는 우연히 Bash 3을 실행하는 CentOS 5 시스템에 로그인했고 해결책을 연구하고 있습니다. 나는 이미 cuonglm의 답변을 찬성했지만 Bash 3(및 4)에서 작동하는 내가 생각해낸 솔루션도 게시하겠다고 생각했습니다. 이름에 공백이 있는 파일 하나와 -
.
바꾸다
IFS=$'\n' read -r -a list <<<"$input"
명령 대체를 사용하여 배열을 만들고 채우십시오.
IFS=$'\n' # split on newline only
set -f # disable globbing
list=($(printf "%s" "$input"))
참고: 이름에 개행 문자가 포함된 파일 이름에는 작동하지 않습니다.