1

我在 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

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

4

2 回答 2

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++))
于 2013-06-20T07:56:34.193 回答
0

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

fam=($(seq -s $'\t' 1 1 5))
于 2013-06-20T11:31:41.713 回答