대 스크립트에서 배열 요소 다른 동작을 추가 나는 다음과 같은 코드를 가지고 : 나는 대화 형으로 복사/붙여 넣기이를 통해 쉘에서이 프로그램을 실행할 때배쉬 : 대화 형 쉘
numbers=()
a=()
a+=('foo bar baz')
for ((x=0; x<=9; x++));
do
numbers+=($x)
done
echo $numbers
echo $a
, 그때 내가 원하는 출력을 얻을 수를 어느입니다
➜ echo $numbers
0 1 2 3 4 5 6 7 8 9
➜ echo $a
foo bar baz
그러나, 나는 내가 할 스크립트로 실행하면
0
foo bar baz
이유는 무엇입니까? 대화 형 셸을 사용하여 어떻게 동작시킬 수 있습니까?
전체 공개 : 나는 광범위하게 검색하여 찾을 수 없습니다. 나는 zsh를 실행하고이 경우 bash와 같다고 가정한다. 나는 bash와 대화식 쉘에 대해 익숙하지 않은데 비해 파일의 차이점에 대해서 잘 알고있다.
편집은 도움이 코멘트를 후 지금은 이상한 범인을 발견. 나는 그것이 chmod +x
과 관련이 있다고 생각합니다. 이 출력 (I가 magic
라는 폴더에있어)입니다
for ((x=0; x<=9; x+=1)) do numbers+=($x); done; echo $numbers;
echo $SHELL
:
나는 간단한 스크립트 작성chmod +x ./test
➜ magic ./test
0
/bin/zsh
➜ magic zsh ./test
0 1 2 3 4 5 6 7 8 9
/bin/zsh
이 될 수를 그 떠들썩한 실행 파일과 chmod +x
세트를 ?
다른 관찰 된 동작이있는 이유는 아직도 알지 못하지만이 답변은 저의 구체적인 문제를 해결하는 데 도움이되었습니다. http://unix.stackexchange.com/questions/211395/in-a-loop-over-an- array-add-an-element-to-the-array - 나는 왜 그 차이가 있는지 궁금해. –
zsh에서 차이점을 재현 할 수 없습니다. ZSH는 쉘 스크립트 내에서 또는 for (x = 0; x <= 9; x + = 1))와 함께 터미널에서 행복하게 보인다. do numbers + = ($ x); 끝난; echo $ numbers;'bash는이 비트를 좋아하지 않으며'echo $ {numbers [@]} '로 배열을 출력하도록합니다. 아마도 터미널이 bash이지만 zsh에서 스크립트를 실행하고 있습니까? 'echo $ SHELL'을 시도하고 어떤 것이 튀어 나오는 지보십시오. – JNevill
나는 또한 'csh','ksh','fish'에서 그 루프를 시도했다. 'csh'와'fish'는 문법 오류가 있었고'ksh'는'bash'처럼 행동했습니다. 따라서 여러분의 사용자 쉘은이 둘 중 하나라고 가정합니다. – JNevill