2016-10-08 4 views
0

bash는 점진적으로 "...

#! /bin/bash 

declare -a input # unnecessary 
declare -a bad 
declare -a good # unnecessary 

input=('alpha 23' 'bravo 79' 'charlie 12') 
echo "input is " ${#input[@]} "long" 
for x in "${input[@]}" 
do 
    bad=$x 
    good[ ${#good[@]} ]=$x 
    echo 
    echo "added '$x', good is now " ${#good[@]} "long, bad is still " ${#bad[@]} "long" 
done 

아래의 코드는 출력은 bash에 대한 매뉴얼 페이지에 따르면

input is 3 long 

added 'alpha 23', good is now 1 long, bad is still 1 long 

added 'bravo 79', good is now 2 long, bad is still 1 long 

added 'charlie 12', good is now 3 long, bad is still 1 long 

입니다 고려 배열에 추가 선택적인 대괄호와 아래 첨자가 제공되는 경우 해당 색인은 에 할당되고, 그렇지 않으면 할당 된 요소의 색인은 에 하나의을 더한 마지막 색인입니다. 색인 생성은 0에서 시작합니다.

"bad = $ x"명령문이 실행될 때마다 인덱스를 자동으로 증가시킬 것으로 예상 했으므로이 부분을 굵은 글씨로 분명히 이해하지 못합니다. 매번 나쁜 [0]을 지정하지 않습니다. 왜 내가 기대했던 내가 좋은 할당 서투른 라인보다 코드를 작성하는 더 좋은 방법이 일을하지 않는

[을 ..] 당신이 인용 된 부분은 할당 관련

+0

[Bash : 키를 지정하지 않고 배열에 값 추가] (http://stackoverflow.com/q/1951506/3) 776858) – Cyrus

답변

2

하지 추가 :

array=([0]=zero [1]=one [2]=two) 

사실,

같은 인

array=([0]=zero one two) 

동등

array=(zero one two) 
배열에 추가하려면, += 사용

array+=(three) 
+0

이제 감사합니다. 위의 코드에서 bad = = x를 bad + = ("$ x")로 바꾼다면 원하는 답을 얻을 수 있습니다. –

0

choroba 내 질문에 대답했다, 올바른 코드가 될 것이다

#! /bin/bash 

input=('alpha 23' 'bravo 79' 'charlie 12') 
echo "input is " ${#input[@]} "long" 
for x in "${input[@]}" 
do 
    output+=("$x") 
done 

echo "output = (" ${output[@]} ") and is " ${#output[@]} " long " 

그것은 검사 및 파라미터의리스트에 처리에 유용 매개 변수에 공백과 다른 어색한 문자가있는 스크립트