2012-05-27 72 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 *元素的正确方法。 –