2012-05-27 70 views
1

我有一個shell腳本,它有一個for循環,用於打印數組元素的值。 數組大小是2,但是當運行該數組的for循環時,我得不到正確的輸出。我的shell腳本有什麼問題

這裏是shell腳本:

#!/bin/bash 

arry=$(ls /home/developer/.ssh/ | grep "\.pub") 
declare -a ARR 
i=0 
for key in $arry 
do 
    ARR[i]=$(echo $key | sed 's/.pub//g') 
    i=$((i+1)) 
done 
echo ${#ARR[@]} 
## the below for loop is not iterating as expected 
for pri in $ARR 
do 
echo $pri 
done 

現在不是給輸出

2 
a 
heroku 

以上代碼生成:

2 
a 

有什麼不對上述shell代碼?

我是比較新的shell腳本所以請原諒我的代碼你覺得它不好

連接輸出的屏幕截圖 enter image description here

回答

4
#!/bin/bash 
arry=(/home/developer/.ssh/*.pub) 

ARR=(${arry[@]%%.pub}) # strip the extensions 

echo "${#ARR[@]}" 

for pri in "${ARR[@]}" 
do 
    echo "$pri" 
done 

使用水珠,而不是ls。使用數組而不是字符串使用數組。

擴大時引用變量。

+0

它感謝您的答案,但可以解釋我的腳本 – Viren

+0

@ user1328293有什麼問題:對於$ {ARR [@]}中的pri「'是迭代數組而不是'pri在$ ARR'中。 –

+1

更具體地說,'$ ARR'擴展爲ARR的*第一個元素*,所以它只是遍歷第一個元素。 '「$ {ARR [@]}」是獲取* all *元素的正確方法。 –