![如何将项目追加到管道中的数组中?](https://linux22.com/image/71418/%E5%A6%82%E4%BD%95%E5%B0%86%E9%A1%B9%E7%9B%AE%E8%BF%BD%E5%8A%A0%E5%88%B0%E7%AE%A1%E9%81%93%E4%B8%AD%E7%9A%84%E6%95%B0%E7%BB%84%E4%B8%AD%EF%BC%9F%20.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
您不能引用子进程中进行的变量更新(管道连接 while 块)。
相反,使用输入重定向提供数据,如下所示:
#!/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