![パイプの配列に項目を追加するには? [コピー]](https://linux33.com/image/71418/%E3%83%91%E3%82%A4%E3%83%97%E3%81%AE%E9%85%8D%E5%88%97%E3%81%AB%E9%A0%85%E7%9B%AE%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
スクリプトはループを介して配列に値を追加してから、配列内のすべての項目を表示する必要があります。
#!/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