如何在BASH中的一行中打印两个数组变量

时间:2013-06-20 07:51:52

标签: arrays bash shell printf

我在ubuntu 12.04 bash中的shell脚本中尝试了这段代码

IFS=$'\t'
name=(one two three four five)
fam=($(seq -s" " 1 1 5))
for (i=0;i<5;i++) 
do 
  printf "%s\t%s\n" ${fam[i]} ${name[i]} 
done

我想要的输出就是那样

1 one
2 two
3 three
4 four
5 five

但真正的输出是

1 2 3 4 5   one
two 
three   
four    
five

我的代码出了什么问题?以及如何使用一个循环在一行中打印多个数组变量?

2 个答案:

答案 0 :(得分:2)

name=(one two three four five)
fam=(1 2 3 4 5)

for i in ${!name[*]}
do
  printf '%s %s\n' ${fam[i]} ${name[i]}
done

或者你可以修复

for  (i = 0; i < 5; i++)
for ((i = 0; i < 5; i++))

答案 1 :(得分:0)

当您将IFS设置为'\ t'时,它会导致数组初始值设定项断开选项卡上的输入,因此您将'1 2 3 4 5'分配给fam [0]。您需要更改seq分隔符以匹配。

fam=($(seq -s $'\t' 1 1 5))