파이프의 배열에 항목을 추가하는 방법은 무엇입니까? [복사]

파이프의 배열에 항목을 추가하는 방법은 무엇입니까? [복사]

스크립트는 루프를 통해 배열에 값을 추가한 다음 배열의 모든 항목을 표시해야 합니다.

#!/bin/bash

data_file="$1"
down=()
counter=0

cat $data_file | while read line; do \
    isEven=$(( $counter % 2 ))
    if [ $isEven -eq 0 ]; then
        down+=("$line")
    fi
    (( counter ++ ))
done

echo ${down[@]}   
exit

하지만 내가 보는 것은 빈 문자열뿐입니다.

host@user$ sh script.sh data_file

host@user$

여기에는 다음이 data_file포함됩니다.

81.11
11.63
81.11
11.63
81.11
11.63
81.11
11.63 

내 실수는 어디에 있습니까? 감사해요.

답변1

하위 프로세스(블록 중 파이프라인)에서 이루어진 변수 업데이트를 참조할 수 없습니다.

대신 다음과 같이 입력 리디렉션을 사용하여 데이터를 제공하세요.

#!/bin/bash

data_file="$1"
down=()
counter=0

while read line; do
    isEven=$(( $counter % 2 ))
    if [ $isEven -eq 0 ]; then
        down+=("$line")
    fi
    (( counter ++ ))
done < $data_file

echo ${down[@]}   
exit

관련 정보