如何在bash脚本中清空数组

时间:2019-04-11 07:46:20

标签: arrays linux bash shell

我正在尝试从一堆文件中获取特定信息。 遍历文件列表,grep满足我的需求。我确定每个grep都会给出1个以上的结果,并且我想将该结果存储在数组中。完成特定于文件的工作后,我要删除数组中的所有内容并重新开始新文件。

files_list=`ls`

for f in $files_list
do
        echo $f
        arr1=`cat $f | grep "abc" | grep "xyz"`
        arr2=`cat $f | grep "pqr" | grep "mno"`
        arr3=`cat $f | grep "df"`
        for ((i=0; i<${#arr1[@]}; ++i)) 
        do
            printf "%s  %s %s\n" "${arr1[i]}" "${arr2[i]}" "${arr3[i]}"
        done
        unset $arr1
        unset $arr2
        unset $arr3
done

所以我用unset来清空数组,但是它给出了错误。

line 49: unset: `x': not a valid identifier

我不想删除特定的数组成员/索引,而是删除整个数组本身。谁能告诉我该怎么做?

1 个答案:

答案 0 :(得分:3)

unset使用变量名,而不是它们保留的值。所以:

unset arr1
unset arr2
unset arr3

或者只是

unset arr{1..3}

我也建议为该任务使用真实数组,例如:

arr+=(`cat $f | grep "abc" | grep "xyz"`)
arr+=(`cat $f | grep "pqr" | grep "mno"`)
arr+=(`cat $f | grep "df"`)

您可以像这样访问数组成员:

echo ${arr[1]}

并清空数组,如下所示:

unset arr

您使用catgrep的方式在我看来也是错误的。我会这样:

grep -e 'abc' -e 'xyz' "$f"