我一直在尝试将数据存储在数组中,如下所示:
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无效,我不知道我在这里缺少什么
答案 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}"