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

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

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

$ 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

쉘 변수는 실행 중인 쉘의 메모리에 저장됩니다. 이름이 지정된 항목을 쉽게 찾을 수 있는 데이터 구조를 사용하세요. 해시 테이블이 좋은 선택입니다.

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

관련 정보