Shell 의 환경 변수 - export, source 와 점 명령 의 차이

4484 단어 Linux
변수의 역할 영역
모든 Shell 프로 세 스 는 자신의 역할 영역 이 있 습 니 다.현재 프로 세 스에 서 직접 정 의 된 변 수 는 국부 변수 (Local Variables) 라 고 할 수 있 으 며, 국부 변 수 는 다른 셸 프로 세 스에 접근 할 수 없습니다.일상적인 개발 에 서 는 셸 스 크 립 트 가 서로 호출 되 는 경우 가 있 습 니 다.셸 에서 다른 셸 스 크 립 트 를 실행 할 때 이 셸 은 새 프로 세 스 를 fork 하여 다른 명령 해석 기 를 시작 하여 이 스 크 립 트 를 실행 합 니 다.새 프로 세 스 는 하위 셸 이 라 고 할 수 있 습 니 다. 이전 셸 은 부모 셸 이 었 습 니 다.하위 셸 도 부모 셸 의 부분 변 수 를 가 져 올 수 없습니다.
#!/bin/bash
name="father"
sh ./son.sh
#!/bin/bash
echo "my father's name is ${name}"
# output: my father's name is

이 럴 때 는 환경 변수 (Environment Variables) 라 는 개념 을 도입 해 야 한다.환경 변 수 는 셸 프로 세 스 의 모든 하위 프로 세 스 에 사용 할 수 있 습 니 다.
export 명령
export 는 bash 셸 에 내 장 된 명령 입 니 다.export 명령 을 사용 하여 환경 변 수 를 새로 만 든 하위 셸 로 내 보 냅 니 다.하위 셸 은 변수의 복사 본 을 가 져 옵 니 다. 하위 셸 에서 환경 변 수 를 수정 하면 부모 셸 에서 이 환경 변수의 값 에 영향 을 주지 않 고 다른 하위 셸 에 도 영향 을 주지 않 습 니 다.일반적으로 환경 변 수 는 대문자 이다.예 를 들 어 보 겠 습 니 다.
#!/bin/bash
NAME="father"
export NAME
sh ./son.sh
echo "my name is ${NAME}"
# output: my name is father
#!/bin/bash
echo "my father's name is ${NAME}"
# output: my father's name is father
NAME="son"

export 명령 을 통 해 내 보 내 는 환경 변 수 는 한계 가 있 습 니 다.
  • 현재 셸 프로 세 스 와 하위 프로 세 스 만 유효 합 니 다. 최상 위 부모 프로 세 스 가 닫 히 면 환경 변 수 는 사라 지고 하위 프로 세 스 도 사용 할 수 없습니다.변 수 는 임시 입 니 다.
  • 변 수 는 하위 셸 로 내 보 낼 수 있 지만 부모 셸 로 내 보 낼 수 없습니다.

  • 소스 명령
    source 명령 도 bash 셸 에 내 장 된 명령 으로 현재 셸 스 크 립 트 나 명령 줄 에 모든 기능 파일 을 불 러 올 수 있 습 니 다.주어진 파일 에서 명령 을 읽 고 실행 한 다음 되 돌려 줍 니 다.source 명령 도 점 명령 이 라 고 불 리 며 집행 source fiilename. filename 의 효 과 는 같다.그러나 일반적으로 source 를 사용 하 는 것 을 권장 합 니 다. 점 은 경로 에서 사용 하 는 점 과 헷 갈 릴 수 있 기 때문에 실 수 를 하기 쉽 습 니 다.예 를 들 어 보 겠 습 니 다.
    #!/bin/bash
    NAME="father"
    source ./son.sh
    echo "[father] my name is ${NAME}"
    # output: [father] my name is son
    echo "my son's name is ${SON_NAME}"
    # output: my son's name is son
    
    #!/bin/bash
    echo "my father's name is ${NAME}"
    # output: my father's name is father
    NAME="son"
    SON_NAME="son"
    

    만약 에 우리 가 sh 가 아 닌 source 를 사용 하여 파일 을 실행 할 때 export 를 사용 하지 않 아 도 부모 셸 은 하위 셸 의 환경 변 수 를 얻 을 수 있 고 하위 셸 도 부모 셸 의 환경 변 수 를 수정 할 수 있 습 니 다.
    총결산
    export 와 source 의 차이
    export 와 source 는 완전히 다른 두 명령 입 니 다. export 는 환경 변 수 를 내 보 내 고 source 는 파일 을 실행 하 는 데 사 용 됩 니 다.
    souce filename 과 sh filename 실행 파일 의 차이
  • sh filename 은 하위 셸 에서 스 크 립 트 의 문 구 를 실행 하 는 키 셸 을 fork 합 니 다.하위 셸 은 부모 셸 에서 내 보 낸 환경 변 수 를 자신 이 사용 할 수 있 도록 복사 할 수 있 지만 환경 변 수 를 수정 할 수 없고 환경 변 수 를 부모 셸 에 내 보 낼 수 없습니다.
  • source filename 은 스 크 립 트 의 문 구 를 읽 고 현재 셸 프로 세 스에 서 순서대로 실 행 됩 니 다. 하위 셸 을 만 들 지 않 습 니 다.스 크 립 트 의 모든 새로 만 들 기, 변 수 를 수정 하 는 문 구 는 현재 셸 에서 유효 합 니 다.
  • 좋은 웹페이지 즐겨찾기