[리눅스] 환경변수 설정할 때 env, set, export, declare

조회수 44357회

환경변수를 등록하는 명령어가 생각보다 많더군요. env, set, export, declare를 사용할 수 있는 것 같은데 명령어가 이렇게나 많은 이유는 무엇인가요?

그리고 이 명령어들 사이에 차이점이 있나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 리눅스에서 가장 많이 사용하는 Bash(혹은 sh)의 빌틴 명령어들입니다.

    각 명령어마다 쓰임새가 조금씩 다릅니다.

    env : 환경변수를 보여주거나, 설정 혹은 삭제 하는 명령입니다. http://ss64.com/bash/env.html

    $ env
    

    현재 세션에 정의된 환경 변수들을 화면에 출력합니다.

    $ env NAME=VALUE 
    

    NAME이라는 환경변수에 VALUE라는 값을 지정합니다.

    $ env -u NAME
    

    NAME 환경변수를 삭제합니다.

    set : Bash의 쉘 변수를 관리하는 명령어입니다. http://ss64.com/bash/set.html

    set NAME=VALUE 
    # Bash에서는 다음과 같이 생략이 가능합니다.
    NAME=VALUE
    

    쉘 변수는 Bash라는 쉘 스크립트 언어에서 사용하는 변수이고, 환경 변수는 운영체제에서 사용하는 변수(예: PATH)입니다.

    해제하는 방법은 unset 명령어를 사용합니다.

    export: 쉘 변수를 환경 변수로 변경해주는 명령입니다.

    NAME=VALUE
    export NAME
    

    위는 set과 export를 사용하여 다음 명령과 동일한 결과를 가져옵니다.

    env NAME=VALUE
    

    declare: 이는 쉘 변수의 타입을 지정하는 명령입니다. https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/declareref.html

    읽기전용, 정수, 배열, 함수 등으로 쉘 변수의 성격을 선언할 때 사용합니다.

    • Bash는 쉘과 스크립트 언어의 성격을 모두 가지고 있습니다. 스크립트로 사용할 때, 쉘 프로그래밍 혹은 쉘 스크립팅이라고 합니다. 프로그래밍 요소가 있기 때문에 위와 같이 변수를 관리하는 명령이 있습니다. 환경 변수와 쉘 변수는 다른 데, 다른 언어에서는 쉽게 구분이 가능한 반면에, 쉘 프로그래밍을 하다 보면 이 두 가지의 사용 용법이 비슷하여 동일한 것으로 오해할 수 있습니다.
    • 유닉스는 "Small is beautiful"이라는 유닉스의 철학에 맞게 작은 프로그램들의 집합으로 구성된 시스템이며, 리눅스는 이를 모방하여 만들어, 별거아닌 것 같은 기능들도 모두 작은 프로그램으로 제공하며, 이러한 명령어들을 이용하여 쉘 프로그래밍을 할 수 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)