这是我的$a
输出:
[root@node1 ~]# echo "${a}"
/dev/vdc1 /gfs1
/dev/vdd1 /elastic
mfsmount /usr/local/flytxt
我必须将它们存储在关联数组fsmounts
中,其中第一列为键,第二列为值。
这是我的代码:
declare -A fsmounts
echo "$a" | while read i ; do key=$(echo "$i" | awk '{print $1}'); value=$(echo "$i" | awk '{print $2}');fsmounts[$key]=$value; done;
但是当我尝试使用
在循环外打印时[root@node1 ~]# echo ${fsmounts[/dev/vdb1]}
空白是输出。我认为关联数组fsmounts实际上并不存储值。请帮助我。
但是我实际上可以在循环内回显fsmounts[$key]
。看到这个:
echo "$a" | while read i ; do key=$(echo "$i" | awk '{print $1}'); value=$(echo "$i" | awk '{print $2}');fsmounts[$key]=$value; echo ${fsmounts[$key]}; done;
/gfs1
/elastic
/usr/local/flytxt
答案 0 :(得分:1)
与您的逻辑相关的迫在眉睫的问题是I set variables in a loop that's in a pipeline. Why do they disappear after the loop terminates? Or, why can't I pipe data to read?
您完全不需要awk
或任何第三方工具。只需使用read
在循环上运行它,然后通过循环上的标准输入来输入字符串即可。
declare -A fsmounts
while read -r key value; do
fsmounts["$key"]="$value"
done <<<"$a"
现在使用键和值在数组上循环
for key in "${!fsmounts[@]}"; do
printf 'key=%s value=%s\n' "$key" "${fsmounts[$key]}"
done
有关如何使用关联数组的更多信息-How can I use variable variables (indirect variables, pointers, references) or associative arrays?