2013-06-20 85 views
1

我想在我的shell腳本的代碼在Ubuntu 12.04的bash如何打印兩個數組變量的線BASH

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

但爲什麼使用seq命令生成數組是錯誤的? –

+0

@YaoHe我認爲更好的問題是,爲什麼它是正確的? –

+0

因爲如果我想要得到像10000這樣的大序列,那麼用鍵盤輸入所有數字並不是一種好方法,您怎麼看? –

0

當設置IFS到「\ T」它使數組初始化打破上翼片的輸入,以便你得到「1 2 3 4 5」分配到fam [0]。您需要更改seq分隔符以匹配。

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