Bash에서 사용자 입력을 배열로 읽는 방법은 무엇입니까? 사용자 입력을

bash쉘 에서 사용자 입력을 배열로 읽는 방법은 무엇입니까?



답변

이를 수행하는 한 가지 방법이 있습니다.

while read line
do
    my_array=("${my_array[@]}" $line)
done

echo ${my_array[@]}

방금 실행하면 Ctrl + D (EOF)를 누를 때까지 표준 입력에서 계속 읽습니다. 나중에 입력 한 줄은입니다 my_array. 일부는이 코드가 혼동 될 수 있습니다. 루프의 본문은 기본적으로 말합니다 my_array = my_array + element.

흥미로운 문서들 :


답변

이것을 사용하여 읽으십시오 :

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는 읽을 .