이 기본 bash for 루프에서 루프 변수가 이해되지 않는 이유는 무엇입니까?

이 기본 bash for 루프에서 루프 변수가 이해되지 않는 이유는 무엇입니까?
$ bash -c "for VAR in {0..9}; do echo $VAR; done;

따옴표로 묶인 내용을 정확하게 포함하는 쉘 스크립트는 예상대로 작동합니다.

결과는 10개의 빈 줄입니다. 이 줄을 어떤 방식으로 편집하든(즉 , /bin/bash대신 , , 또는 다른 변수 이름을 사용하여 ) 파일에 동일한 결과가 출력됩니다.shbash${VAR}"$VAR""${VAR}"

앞서 설정한 변수 이름을 으로만 사용하면 $ VAR=11, 10번 출력됩니다.

내 사용자에게는 둘 다 .bash완전히 정상적으로 보입니다 . .bash_profile이것이 나를 미치게 만들고 있지만 매우 분명한 것을 놓치고 있습니까?

답변1

다음 명령을 사용하여 디버깅을 켜면 무슨 일이 일어나고 있는지 확인할 수 있습니다 set -x.

$ set -x
$ bash -c "for VAR in {0..9}; do echo $VAR; done;"
+ bash -c 'for VAR in {0..9}; do echo ; done;'

따라서 표현식 주위에 큰따옴표를 사용하면 -c대화형 상위 셸 확장 $VAR(빈 문자열까지)이 가능합니다. 작은따옴표를 사용하면 예상대로 작동합니다.

bash -c 'for VAR in {0..9}; do echo $VAR; done;'

또는 탈출하려면 $:

bash -c "for VAR in {0..9}; do echo \$VAR; done;"

관련 정보