쉘 변수는 어디에 저장됩니까?

쉘 변수는 어디에 저장됩니까?

예를 들어, 내가매개변수 확장:

$ b=1
$ echo $b
1

내부 저장소는 어디에 있나요 b? 확인해 보니 목록에 없기 때문에 환경 변수가 아닙니다 printenv. 저는 Unix를 배우기 위해 자체 쉘을 작성하고 있으며 변수를 저장하고 검색하기 위해 해시 테이블을 "기호 조회 테이블"로 사용하고 있습니다. 이것이 좋은 접근 방식입니까, 아니면 다른 것을 제안해 주시겠습니까?

답변1

명령을 읽고 실행하기 위해 로그인할 때 실행되는 셸은 모든 변수를 유지합니다. 두 번째 셸을 실행하면 자체 변수 세트가 생깁니다. 이 set명령을 실행하면 변수 목록을 볼 수 있습니다. 이 set명령은 새 프로세스를 시작하는 대신 셸 내부에서 실행됩니다.

환경 변수는 별도의 공간에 보관되거나 태그가 지정되어(중요한 경우 쉘 소스 코드 읽기) 쉘이 실행하는 프로그램에 전달됩니다.

두 개의 해시 테이블을 사용하는 것이 합리적이라고 생각됩니다.

답변2

프로그램 실행 중에 변수일 뿐입니다. 이에 대해 생각하는 또 다른 방법은 다음과 같이 프로그램을 다시 작성하는 것입니다.

#!/bin/bash
b=1
echo $b
exit

이제 터미널에서 이 작업을 수행한 다음 해당 터미널 세션을 종료한다고 가정해 보겠습니다. 다른 터미널 세션을 열면 표시되지 않습니다아무것b=1이전 세션의 이 작업에 대해 .

이를 "전역 변수"가 아닌 "지역 변수"라고 합니다. 표시하기 위해 다른 많은 기능과 함께 사용됩니다 set.

따라서 과제를 보려면 다음을 수행하십시오.

set |grep '^b='

b=1

보다Linux 문서화 프로젝트더 많은 정보를 알고 싶습니다.

답변3

쉘 변수는 실행 중인 쉘의 메모리에 저장됩니다. 이름으로 항목을 쉽게 찾을 수 있는 데이터 구조를 사용하는 것이 좋습니다.

쉘 변수와 환경 변수의 차이점은 환경 변수가 하위 프로세스의 환경에 배치된다는 것입니다. 모든 환경 변수는 쉘 변수입니다. 이를 저장하는 자연스러운 방법은 변수 이름을 값이 아닌 값과 일부 플래그(내보내기, 읽기 전용 등)가 포함된 구조에 매핑하는 해시 테이블을 만드는 것입니다.

관련 정보