使用Bash脚本向数组添加值

时间:2015-07-10 09:36:19

标签: arrays bash shell loops

我写了以下脚本,

#!/bin/bash
My_File=Image.csv
Value=YES
cat "$My_File" | while IFS=, read first last
do
    echo "first='$first' last='$last'"
    if [ "$last" == "$Value" ];
       then
       echo Match_Found
       echo $first
       array+=("$first")
       echo $first is Added
    fi
done
echo (${#array[@]})

它dosenot向数组添加任何值,有人可以指出问题。 输入如下,

FA_2015-01_666,NO
FA_2015-01_777,YES
FA_2015-01_888,NO
FA_2015-01_999,YES
FA_2015-01_555,YES

2 个答案:

答案 0 :(得分:1)

重定向文件,不要从cat管道或循环在子shell中运行,其中的所有内容在结束时都会丢失。

#!/bin/bash
My_File="Image.csv"
Value=YES
while IFS=, read first last
do
    if [ "$last" == "$Value" ];
       then
       echo Match_Found
       echo $first
       array+=("$first")
       echo $first is Added
    fi
done < "$My_File"
echo "${#array[@]}"

答案 1 :(得分:0)

我有一段时间没有做过一些bash编码,但它应该是这样的(我的方式):

#our table to insert an item to
table=( )
tableLength=${#table[@]}

#inserting items
table[$tableLength]="foo"
#you have to refresh this variable everytime
tableLength=${#table[@]}
table[$tableLength]="bar"
#or you can do this without refreshing the length variable
table[${#table[@]}]="foobar"

我建议您使用:

table=()
table[${#table[@]}]="item!"

使用#作为长度,table[@]显示所有项目,因此它获取数组的长度并将项目设置为数组或表格的长度