НЕВЕРМИНД, ПИЛА "БУРН" и думала "БУРН СНОВА". Оставьте это здесь, потому что это может быть полезно для кого-то, но явно не ответ на заданный вопрос, извините!
-
У этого есть некоторые недостатки (он не изящно обрабатывает списки разных размеров), но он работает для приведенного вами примера:
#!/bin/bash
list1="a b c"
list2="1 2 3"
c=0
for i in $list1
do
l1[$c]=$i
c=$(($c+1))
done
c=0
for i in $list2
do
echo ${l1[$c]} $i
c=$(($c+1))
done
Существуют более изящные способы использования распространенных инструментов Unix, таких как awk и cut, но вышеприведенная реализация является чистой реализацией bash согласно запросу
Комментируя принятый ответ, он не работал для меня ни в Linux, ни в Solaris, проблема заключалась в ярлыке класса символов \ S в регулярном выражении для sed. Я заменил его на [^], и это сработало:
#!/bin/sh
list1="1 2 3"
list2="a b c"
while [ -n "$list1" ]
do
head1=`echo "$list1" | cut -d ' ' -f 1`
list1=`echo "$list1" | sed 's/[^ ]* *\(.*\)$/\1/'`
head2=`echo "$list2" | cut -d ' ' -f 1`
list2=`echo "$list2" | sed 's/[^ ]* *\(.*\)$/\1/'`
echo $head1 $head2
done