bash
쉘 에서 사용자 입력을 배열로 읽는 방법은 무엇입니까?
답변
이를 수행하는 한 가지 방법이 있습니다.
while read line
do
my_array=("${my_array[@]}" $line)
done
echo ${my_array[@]}
방금 실행하면 Ctrl + D (EOF)를 누를 때까지 표준 입력에서 계속 읽습니다. 나중에 입력 한 줄은입니다 my_array
. 일부는이 코드가 혼동 될 수 있습니다. 루프의 본문은 기본적으로 말합니다 my_array = my_array + element
.
흥미로운 문서들 :
-
내장 읽기 의 맨 페이지
-
thegeekstuff.com의 15 가지 배열 예
답변
이것을 사용하여 읽으십시오 :
read -a arr
인쇄하려면 다음을 사용하십시오.
for elem in ${arr[@]}
do
echo $elem
done
답변
그리고 매번 배열을 다시 생성하지 않는 것 (bash 3.1 이상이 필요하지만) :
array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
[[ $line ]] || break # break if line is empty
array+=("$line")
done
printf '%s\n' "Items read:"
printf ' «%s»\n' "${array[@]}"
자세한 내용은 http://mywiki.wooledge.org/BashFAQ/001 을 참조 하십시오 .
항상 버그를 작성하지 않으려면 http://mywiki.wooledge.org/BashGuide를 읽고 Advanced bash 스크립팅 안내서와 같은 tldp-guide를 피하십시오.
답변
이 하나의 라이너는 어떻습니까?)
arr=( $(cat -) )
echo ${arr[@]}
편집하다:
에서 bash
,
arr=(val1 val2 ...)
배열 에 할당 하는 방법입니다 . 이를 명령 대체와 함께 사용하면 파이프 라인에서 배열을 읽을 수 있으며이 방법을 사용 read
하여이를 간단하게 수행 할 수는 없습니다 .
echo -e "a\nb" | read -a arr
echo ${arr[@]}
파이프 라인이 서브 쉘에서 실행될 수 있으므로 변수가 전혀 사용되지 않을 수 있기 때문에 파이프가 파이프 인 경우 read
아무 것도 수행하지 않기 때문에 아무것도 출력 하지 않습니다stdin
.
이 답변에서 제안한 방식을 사용하십시오.
arr=(`echo -e "a\nb"`)
echo ${arr[@]}
그것은주는 a b
방법으로 간단하고 직선 앞으로의 답변에 의해 주어진 어떤 해결 방법보다하는 파이프에서 쉘 변수로 읽기 값 및 파이프 값을 설정하지 않는 한 후 bash는 읽을 .