パイプの配列に項目を追加するには? [コピー]

パイプの配列に項目を追加するには? [コピー]

スクリプトはループを介して配列に値を追加してから、配列内のすべての項目を表示する必要があります。

#!/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

関連情報