2014-02-16 2 views
1

Я видел немало различных решений для решения проблемы с сохранением массива из трубы, но ни один из них не казался мне трюком, в настоящее время мой скрипт работает правильно, однако массив «databasesarray» теряется на «сделано», как бы я хотел сохранить эту информацию с помощью моей сложной схемы трубопроводов?Правильный способ сохранить массив из трубы BASH

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 

ответ

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}') 
+0

Благодарим вас за это! однако после «$ db:» $ (gdb «$ db» | grep «dn») не появляется, чтобы распечатать, какой будет $ (gdb «$ db» | grep «dn») – sunshinekitty

+0

Фактически это была опечатка , Я отредактировал его сейчас. – anubhava

+0

Думаю, что вы на правильном пути, вывод я получаю: [0] fqdn [1] = [2] www.example.com, кажется, теперь $ db отсутствует, и он присваивает каждому слову вывода из команды gdb grep – sunshinekitty

Смежные вопросы