2016-06-27 88 views
1

我是shell腳本編程新手。我正在嘗試創建一個大小爲n的數組,其中n是用戶在運行時輸入的。用shell腳本填充用戶輸入的動態數組

while [ $i -lt $n ] 
do 

    echo For person $i enter the name? 
    read io 
    eval Name[$index]= $io 

done 

當我嘗試這樣做時,每當循環獲取來自用戶的輸入時,值都被覆蓋。

例如:如果人1是 - 湯姆,如果人2是 - 約翰。然後,當我嘗試在腳本的最後打印所有人的名字時,人名1將被人名n覆蓋(這意味着,所有名字都存儲在一個單獨的變量中而不是數組中)。

有人能告訴我我哪裏錯了嗎?

+0

你可以擺脫'$ index'和'eval'的。只需用'Name =(「$ {Name [@]}」「$ io」)'替換'eval Name [$ index] = $ io''。 – alvits

回答

0
  • 您需要在循環中增加i,以便它最終退出。這條線增加i按1:

    let i+=1 
    
  • 你不需要在eval Name[$index]= $io使用eval

  • 沒有變量名爲index(至少在您的代碼示例中沒有)。我假設你打算在那裏使用i。 (即Name[$index]應該是Name[$i]

此代碼:

#!/bin/sh -e 

Name=() 
i=0 

while [ $i -lt 4 ] 
do 
    echo For person $i enter the name? 
    read io 
    Name[$i]=${io} 
    let i+=1 
done 

echo names: 
for n in "${Name[@]}" 
do 
    echo $n 
done 
+0

謝謝@ tony19.It爲我工作。我試圖在同一個循環內打印多個數組值,例如:person:1 - 打印名稱,年齡,dob等等。所以我遵循了同樣的技巧來聲明3個數組。當我試圖做「echo person 1 {$ Name [$ i]}」時,我無法訪問變量Name的相應值。而只是打印「名稱[0]」。這種情況是否有任何語法? –