Комбинированные переменные с переменными входами в одну строку

var1=( some command together ) echo $var1 myserver user@xx.xx.xx.xx load24 /dev/tty user1 myserver user@xx.xx.xx.xx load24 /dev/tty user2 myserver user@xx.xx.xx.xx load24 /dev/tty user3 myserver user@xx.xx.xx.xx load24 /dev/tty user4 var2=$( some command together | awk '{print $5}') echo "$var2" user1 user2 user3 user4 for i in $var2; do ldapsearch -xyx $i done; 

Выход цикла будет подобен

 DEP AB BC CD EF dep GH IJ KL MN DEP OP QR ST UV DEP WX YZ AC BC 

Теперь я хочу объединить все varibales, чтобы посмотреть на него как

 myserver user@xx.xx.xx.xx load24 /dev/tty user1 EP AB BC CD EF myserver user@xx.xx.xx.xx load24 /dev/tty user2 dep GH IJ KL MN myserver user@xx.xx.xx.xx load24 /dev/tty user3 DEP OP QR ST UV myserver user@xx.xx.xx.xx load24 /dev/tty user4 DEP WX YZ AC BC 

Примечание. Я не хочу перенаправлять какой-либо вывод во временный файл, просто хочу сгенерировать последний вывод для записи

Я сделал пример автономным относительно $var1 и $var2 :

 #!/bin/bash var1=$(for i in 1 2 3 4; do echo "a$ib$i user$i"; done) echo "$var1" var2=$(for i in 1 2 3 4; do echo "user$i"; done) echo "$var2" for i in $var2 do j=$((j+1)) line=$(echo "$var1" | head -n $j | tail -n 1) printf "%s %s\n" "$line" "$(echo ldap result for $i)" done 

Эти результаты:

 a1 b1 user1 a2 b2 user2 a3 b3 user3 a4 b4 user4 user1 user2 user3 user4 a1 b1 user1 ldap result for user1 a2 b2 user2 ldap result for user2 a3 b3 user3 ldap result for user3 a4 b4 user4 ldap result for user4 

В строке printf просто замените результат echo ldap result for $i командой, которую вы хотите, например ldapsearch -xyx $i .

Примечание: с zsh (вместо bash) это может быть даже немного проще благодаря поддержке массивов.

Альтернативное решение, основанное на команде paste (хотя интервал менее контролируемый):

 #!/bin/bash var1=$(for i in 1 2 3 4; do echo "a$ib$i user$i"; done) echo "$var1" var2=$(for i in 1 2 3 4; do echo "user$i"; done) echo "$var2" for i in $var2 do echo "ldap result for $i" done | paste <(echo "$var1") - 

Сделайте все в цикле:

 while read -r serv addr load tty usr; do printf "%s %s %s %s %s %s\n" \ "${serv}" "${addr}" "${load}" "${tty}" "${usr}" $(ldapsearch -xyx "${usr}") done < <( some command together ) 

Если < <( some command together ) вы перенаправляете вывод some command together в цикл while.