BASH_SUBSHELL 값은 변경되지 않지만 SLVL 값은 변경되는 이유는 무엇입니까? [복사]

BASH_SUBSHELL 값은 변경되지 않지만 SLVL 값은 변경되는 이유는 무엇입니까? [복사]

bash 매뉴얼에 따르면

BASH_SUBSHELL 쉘이 해당 환경에서 실행을 시작할 때 각 서브쉘 또는 서브쉘 환경에 하나씩 추가하십시오. 초기값은 0입니다.

SHLVL새로운 Bash 인스턴스가 시작될 때마다 1씩 증가합니다. 이는 Bash 쉘의 중첩 깊이를 계산하는 데 사용됩니다.

이 두 내장 변수의 차이점은 무엇입니까?

구체적으로 "서브쉘 또는 서브쉘 환경"과 "Bash 쉘"의 차이점은 무엇입니까?

아래 예에서 의 값은 BASH_SUBSHELL변하지 않지만 의 값은 SHLVL변하는 이유는 무엇입니까?

$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
1
$ bash
$ echo $BASH_SUBSHELL
0
$ echo $SHLVL
2

답변1

이는 메인 쉘 내의 하위 쉘을 나타냅니다.

비교하다

echo "a" $BASH_SUBSHELL "b" $SHLVL

그리고

( echo "a" $BASH_SUBSHELL "b" $SHLVL )

또는

( ( echo "a" $BASH_SUBSHELL "b" $SHLVL ) ) 

환경 변수를 설정하는 경우 함수 내에서 유용할 수 있습니다.

관련 정보