Today
-
Yesterday
-
Total
-
  • 💡 [Unix-Linux] 환경 변수(environment variable)에 대해 Araboza
    | 프로그래밍 분야/Unix-Linux 2021. 3. 28. 02:29

    변수 분류

    아마 어떤 프로그래밍 언어든, 아주 약간이라도 접해보신 분이라면 '변수'가 무엇인지는 알 것이다. 그리고 C언어나 C++, JAVA 등을 어느정도 공부해보신 분이라면 '지역 변수', 그리고 '전역 변수'에 대해 알 것이다.

     

    Unix-Linux 환경의 Shell도 프로그램이기 때문에, 그와 마찬가지의 개념이 둘 있다.

    바로 쉘 변수(Shell variable)와 환경 변수(Environment variable).

    쉘 변수는 말 그대로 내가 지금 사용하고 있는 쉘에서만 사용하는 변수이다. 현재 세션을 종료하면 사라진다.

    환경 변수는 운영체제에 할당되는 변수이다. 세션을 종료해도 유지된다.

     

    여기까지의 개념은 같지만, 프로그래밍 언어들과 다른 하나의 차이가 있다. 바로 '형태가 정해지지 않았다는 것.'

    이게 정말 재미있는 부분인데, 아래에서 테스트 과정과 함께 다시 언급하기로 하겠다.

     

     

    조회/선언/제거 방법

    환경 변수에 관한 글이니 쉘 변수의 케이스는 생략하겠다.

    export env printenv 셋 모두 환경변수를 조회할 수 있는 명령어이다.

    export [변수명]=[내용] 환경변수를 선언할 수 있다. [내용]은 생략 시 default로 '\0' 이 들어간다. ※'[변수명]=[내용]' 부분에 공백 있으면 bad 어쩌구 하면서 오류가 뜨고 '\0' 값으로 들어감 주의.

    unset [변수명] 환경변수를 제거할 수 있다.

    더보기

    추가 내용

    • 영구 설정 방법(모든 사용자)
      • /etc/bash.bashrc 파일에 export <변수명>=<값>을 작성하고, source /etc/bash.bashrc 명령을 통해 적용 해 주면 된다.
      • /etc/profile파일을 수정하거나, /etc/profile.d/폴더 하위에 .sh로 끝나는 쉘 스크립트 파일을 추가해서 적용도 가능함
    • 영구 설정 방법(특정 사용자)
      • 특정 사용자에게만 적용을 원할시에는 /home/<user>/.bashrc 파일에 작성하면 된다.
      • /home/<user> 폴더내에 .bashrc,bash_login,.profile 파일 수정

     

    그래서 이게 뭔데?

    변수는 '명칭'이다.

    다른 프로그래밍 언어에서도 그렇지만, 리눅스에서는 그 개념이 더욱 명확하다.

    나는 이걸 스마트폰이라고 부른다. 누군가는 핸드폰, 휴대폰, 폰, 전화기, 전화, 셀룰러폰, 철수, 영희, 동생, 베프 등등으로 부를 것이다.

    이 모든 명칭이 바로 '변수'이다. 내가 이걸 어떻게 부르겠다고 정하는 것.

     

    그럼 어디 환경 변수를 한 번 조회해보자.

    이런식으로 주루룩 나올 것이다. 이게 무슨 의미냐면, 내가 HOME이라고 하면 시스템은 이를 /Users/syoon 으로 알아먹겠다는 소리이다. 내가 LOGNAME이라고 하면, 시스템은 syoon으로 알아먹겠다는 소리이다.

    (단, 진짜 "HOME"과의 구분을 위해 앞에 $ 기호를 붙여 "$HOME"으로 표현한다.)

     

    실제로 그런지 한 번 확인해보자.

    echo는 텍스트를 출력하고 한 줄 개행하는 명령어이다. 생각한 대로 출력이 되는 모습이다.

     

    위에서 말한대로, Shell 환경에서 변수는 '진짜 형태가 없다.' 즉, 무엇이든 될 수 있다.

    환경 변수를 하나 생성해보며 그 의미를 알아보자.

    임시로 파일을 3개 만들고, testtt라는 환경변수를 만들어 파일 리스트를 출력해주는 명령어인 ls를 넣어주었다.

    그리고 변수를 호출하자, ls 명령어가 실행되는 모습이다.

    즉, Shell에서는 변수에 ls vim cd 등의 명령어를 저장할 수 있다.... 다만, 스페이스바가 들어가면 ' '로 묶어서 변수선언은 할 수 있지만 'cd ..'와 같은 명령어는 수행할 수 없다. 만약 긴 명령어를 짧게 저장하고 싶다면, alias를 구글링해보자.

     

    ※참고 : 정의하지 않은 전역 변수를 호출 시 '\0'이 반환된다. 이를테면, id $qwojqid와 같다.

sangilyoon.dev@gmail.com