2012-05-27 4 views
1

배열 요소의 값을 인쇄하는 for 루프가있는 셸 스크립트가 있습니다. 배열 크기는 2이지만 해당 배열로 for 루프를 실행할 때 출력이 적절하지 않습니다. 여기 셸 스크립트의 문제점

쉘 스크립트입니다 대신 출력을주는 이제

#!/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 

?

은 내가 당신이 lsenter 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 

사용 globs와 대신 출력의 스크린 샷을 첨부하지 좋은

느낄 스크립트 그렇게 내 코드를 용서 쉘에 비교적 새로운 해요.

문자열 대신 배열을 사용하십시오.

확장 된 변수.

+0

답변을 주셔서 감사합니다. 그러나 내 스크립트의 잘못된 점을 설명해 주시겠습니까? – Viren

+0

@ user1328293 : $ {ARR [@]} "의 pri는'for pri 대신 배열을 반복하는 올바른 방법입니다. $ ARR에서. –

+1

보다 구체적으로 말하면, '$ ARR'은 ARR의 * 첫 번째 요소 *로 확장되므로 첫 번째 요소를 반복합니다. ''$ {ARR [@]} ''는 모든 요소를 ​​얻는 올바른 방법입니다. –

관련 문제