保持阵列管道BASH的正确方法

时间:2014-02-16 13:34:14

标签: arrays bash pipe

我看到了很多不同的解决方案来解决一个问题,从管道中保留一个数组但是似乎没有人为我做这个技巧,目前我的脚本正常工作但数组“databasesarray”在“完成”时丢失,如何我会用复杂的管道方案来保存这些信息吗?

databasesarray=()
N=0

dbs -d 123123 | grep db|awk '{print $2}'|while read db;
do
    databasesarray[$N]="$db";
    databasesarray[$N]+=$(gdb $db|grep dn);
    echo ${N} ${databasesarray[$N]};
    N=$(($N + 1));
done

1 个答案:

答案 0 :(得分:3)

在循环中填充数组的更好,更有效的方法:

databasesarray=()

while read -r db; do
    databasesarray+=( "$db $(gdb "$db"|grep "dn")" )
done < <(dbs -d 123123 | awk '/db/{print $2}')
  • 你的grep和awk可以组合成一个
  • 而不是管道,而更好地使用流程替换< <(...)语法

PS:您可以使用read -a来填充数组:

read -a databasesarray < <(dbs -d 123123 | awk '/db/{print $2}')