[Linux] Shell Variables - 지역 변수와 환경 변수



Shell Variables는 스크립트 작성에 있어서 필수적인 요소입니다. 변수는 크게 지역 변수(local variable)와 환경 변수(environment variable) 두 가지로 구분되며, 각각의 용도와 범위가 다릅니다. 이번 글에서는 이 두 변수의 차이점을 실제 예제를 통해 비교해 보겠습니다.


Shell Variables - 지역 변수

지역 변수는 현재 쉘 또는 특정 스크립트 내에서만 유효한 변수입니다. 이 변수는 해당 프로세스 내부에서만 사용 가능하며, 자식 프로세스에는 전달되지 않습니다.


지역 변수 생성 및 확인

지역 변수는 리눅스 터미널에서 아래와 같이 간단히 정의할 수 있습니다.

[root@rhel84 ~]# color=blue 

이 경우 color라는 변수에 blue라는 값이 저장됩니다. 해당 변수는 현재 쉘 세션 내에서만 유효하며, 자식 프로세스에서는 사용할 수 없습니다.

다음으로, echo 명령어를 사용해 변수 값을 확인할 수 있습니다.

[root@rhel84 ~]# echo $color
blue

또한, 아래와 같은 스크립트를 생성해 자식 프로세스 내에서 변수 인식 여부를 테스트할 수 있습니다.

[root@rhel84 ~]# cat color.sh 
#!/bin/bash
echo $color
[root@rhel84 ~]# sh color.sh 

[root@rhel84 ~]# echo $color
blue

스크립트 내에서는 변수가 출력되지 않는 것을 확인할 수 있습니다. 이는 color 변수가 지역 변수이기 때문입니다.


지역 변수 확인 명령어

지역 변수는 set 명령어를 통해 확인할 수 있습니다. 이 명령어는 지역 변수와 환경 변수를 구분 없이 모두 출력합니다. 아래 예제는 color라는 지역 변수가 등록되어 있는지 확인하는 방법입니다.

[root@rhel84 ~]# set | grep ^color=
color=blue

 환경 변수 - Shell Variables

환경 변수는 시스템 전체에서 사용 가능한 변수입니다. 환경 변수로 설정된 변수는 자식 프로세스에서도 사용할 수 있어서 시스템 전역 설정 및 사용자 환경 구성에 많이 사용됩니다.

 

환경 변수 생성

변수 정의 시 export(내보내기)를 사용하면 하위 프로세스가 변수를 상속받을 수 있도록 환경 변수로 변수가 설정됩니다. export는 bash의 내장 쉘 명령어입니다.

[root@rhel84 ~]# export color=red

참고로 bash 내장 쉘 명령어 인지 아닌지는 type 명령어로 확인해 볼 수 있습니다.

## bash 쉘 내장 명령어
[root@server ~]# type export
export is a shell builtin

## 일반 명령어
[root@server ~]# type date
date is /usr/bin/date

환경 변수 확인

환경 변수는 echoenv 명령어로 확인할 수 있습니다. env는 시스템에 등록된 모든 환경 변수를 출력합니다.

oot@rhel84 ~]# echo $color
red
[root@rhel84 ~]# env | grep color
color=red

설정한 환경 변수가 스크립트에서도 정상적으로 인식되는지 아래 예제로 확인할 수 있습니다.

[root@rhel84 ~]# cat color.sh 
#!/bin/bash
echo $color
[root@rhel84 ~]# sh color.sh 
red

변수 해제 - unset 명령

설정한 변수는 unset 명령어를 이용해 해제할 수 있습니다. 지역 변수든 환경 변수든 동일하게 적용됩니다.

[root@rhel84 ~]# export color=red
[root@rhel84 ~]# env | grep color
color=red
[root@rhel84 ~]# unset color
[root@rhel84 ~]# env | grep color

파일 내에 변수가 설정되어 있다면 해당 파일이 다시 실행될 때 변수가 재설정될 수 있으므로 주의가 필요합니다.

 

마치며

이번 글에서는 지역 변수와 환경 변수의 차이점에 대해 살펴보았습니다. 지역 변수는 현재 쉘 세션에서만 유효하며, 주로 임시 스크립트나 한정된 작업에서 사용됩니다. 반면, 환경 변수는 자식 프로세스에도 전달되기 때문에 전역 설정이나 로그인 환경 구성에 자주 사용됩니다.

특히 대표적인 예로는 PATH 환경 변수가 있으며, 이 변수는 시스템 명령어의 위치를 알려주는 중요한 설정입니다. PATH 설정 방법에 대해서는 여기에서 자세히 확인하실 수 있습니다.

 

참고

https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/

https://www.redhat.com/sysadmin/linux-environment-variables

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용