数组不会返回ref值(bash)

时间:2015-12-02 16:49:19

标签: arrays bash

我一直在尝试将数据存储在数组中,如下所示:

table="$1"
reference="$2"
directory="$3"

declare -A count

$reference | while read line; do
    ref=`echo $line | cut -d " " -f1`
    key=`echo $line | cut -d " " -f4`
    count=([$key]=$ref)
    echo $ref
    echo $key
    echo "${count[$key]}"
 done

这是有效的,我做的打印和每个键我得到了我想要的值。然后,我尝试使用一些键:

cat $table | while read line; do
    sample=`echo $line | cut -d "_" -f1`
    id=${count[$line]}
    echo $sample
    echo $line
    echo $id
    echo "works"
done

问题在于:样本完美地回显,就像$ line和“works”一样。但$ id无效,我不知道我在这里缺少什么

1 个答案:

答案 0 :(得分:1)

那是因为只要运行while循环的子shell退出,count中存储的内容就会消失。您管道的while循环在子shell中运行。所以你设置的任何变量都是"如果它在外面不可用。这意味着当您稍后使用count时,它没有任何元素。

将循环更改为:

while IFS= read -r line; do
    ref=`echo $line | cut -d " " -f1`
    key=`echo $line | cut -d " " -f4`
    count["$key"]="$ref"
    echo $ref
    echo $key
    echo "${count[$key]}"
 done < "${reference}"

同样在另一个循环中改变。

我假设reference是一个文件。如果reference实际上是您想要阅读&#34;行&#34;的文本。从那时起,您可以使用here strings

while IFS= read -r line; do
    ...
    ...  
done <<< "${reference}"