如何将项目附加到管道中的数组?

hdf*_*hdf 6 bash pipe array

该脚本应该简单地通过循环向数组添加一个值,然后显示数组的所有项目。

#!/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
Run Code Online (Sandbox Code Playgroud)

但我看到的只是空字符串:

host@user$ sh script.sh data_file

host@user$
Run Code Online (Sandbox Code Playgroud)

data_file包含此:

81.11
11.63
81.11
11.63
81.11
11.63
81.11
11.63 
Run Code Online (Sandbox Code Playgroud)

我的错在哪里?谢谢。

yae*_*shi 12

您不能引用在子进程中进行的变量更新(管道连接而块)。

相反,使用输入重定向来提供数据,如下所示:

#!/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
Run Code Online (Sandbox Code Playgroud)