![BASH_SUBSHELL 값은 변경되지 않지만 SLVL 값은 변경되는 이유는 무엇입니까? [복사]](https://linux55.com/image/100580/BASH_SUBSHELL%20%EA%B0%92%EC%9D%80%20%EB%B3%80%EA%B2%BD%EB%90%98%EC%A7%80%20%EC%95%8A%EC%A7%80%EB%A7%8C%20SLVL%20%EA%B0%92%EC%9D%80%20%EB%B3%80%EA%B2%BD%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
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 ) )
환경 변수를 설정하는 경우 함수 내에서 유용할 수 있습니다.