리눅스 Bash 쉘에서 export란?

작성·검토정보처리기사 학습센터 편집부 게시일 최종 확인일

리눅스 Bash 쉘에서 export란?

리눅스를 처음 접하면 터미널에서 export라는 명령어를 자주 만나게 됩니다.

예를 들어 프로그램 설치 안내를 따라가다 보면 아래처럼 입력하라는 문장이 등장합니다.

export JAVA_HOME=/usr/lib/jvm/java-17

또는 이런 명령어도 볼 수 있습니다.

export PATH=$PATH:/home/user/bin

처음 보면 export가 파일을 내보내는 명령어처럼 느껴질 수도 있습니다. 하지만 Bash 쉘에서 export는 변수를 환경변수로 만들어 현재 쉘에서 실행하는 다른 프로그램도 사용할 수 있게 하는 명령어입니다.

비전공자도 이해할 수 있도록 하나씩 살펴보겠습니다.

Bash 쉘 + export 기본 개념

Bash 쉘이란 무엇일까?

리눅스에서 터미널을 열고 명령어를 입력하면 그 명령어를 컴퓨터가 바로 읽는 것은 아닙니다.

사용자가 입력한 명령어를 받아 해석하고 운영체제에 전달해 주는 프로그램이 있는데, 이것을 쉘(Shell)​이라고 합니다.

대표적인 쉘 중 하나가 Bash입니다.

echo "Hello"

터미널에 이런 명령어를 입력하면 Bash가 명령어를 해석한 뒤 실행해 줍니다.

쉽게 말하면 Bash는 사용자와 리눅스 사이에서 명령어를 전달해 주는 프로그램이라고 생각하면 됩니다.

export는 무엇을 하는 명령어일까?

Bash에서는 변수를 만들 수 있습니다.

NAME=kim

그리고 아래처럼 값을 확인할 수 있습니다.

echo $NAME

결과는 다음과 같습니다.

kim

여기까지는 변수 하나를 만든 것입니다.

그런데 Bash에서 만든 일반 변수는 현재 쉘 안에서만 사용할 수 있습니다.

이때 export를 붙이면 해당 변수를 환경변수(Environment Variable)​로 만들 수 있습니다.

export NAME=kim

이제 현재 Bash에서 실행되는 프로그램이나 하위 쉘에서도 NAME이라는 값을 사용할 수 있게 됩니다.

일반 변수 + 환경변수 차이

일반 변수 만들기

먼저 다음과 같이 일반 변수를 만들어 보겠습니다.

MY_NAME=hong

값은 $를 붙여 확인할 수 있습니다.

echo $MY_NAME

결과:

hong

이 변수는 현재 Bash에서 사용할 수 있습니다.

하지만 현재 Bash에서 새로운 Bash를 실행하면 이야기가 달라집니다.

bash

새로운 Bash에서 다음 명령어를 입력합니다.

echo $MY_NAME

아무것도 나오지 않을 수 있습니다.

MY_NAME이 현재 쉘에서만 사용하는 일반 변수이기 때문입니다.

export로 환경변수 만들기

이번에는 변수를 만든 뒤 export를 사용해 보겠습니다.

MY_NAME=hong export MY_NAME

한 줄로 작성하는 것도 가능합니다.

export MY_NAME=hong

그다음 새로운 Bash를 실행합니다.

bash

그리고 값을 확인합니다.

echo $MY_NAME

결과:

hong

이번에는 새로운 Bash에서도 값을 확인할 수 있습니다.

export를 사용해 MY_NAME을 환경변수로 만들었기 때문입니다.

export 문법 + 기본 사용법

변수와 값을 한 번에 지정하기

가장 많이 사용하는 형태는 다음과 같습니다.

export 변수이름=값

예를 들어 다음처럼 사용할 수 있습니다.

export USER_NAME=hong

값을 확인해 보겠습니다.

echo $USER_NAME

결과:

hong

여기서 한 가지 주의할 부분이 있습니다.

= 앞뒤에는 공백을 넣으면 안 됩니다.

올바른 작성 방법은 다음과 같습니다.

export USER_NAME=hong

반면 아래처럼 작성하면 원하는 대로 동작하지 않습니다.

export USER_NAME = hong

Bash에서는 공백을 기준으로 명령어와 값을 구분하기 때문에 변수에 값을 넣을 때는 = 앞뒤를 붙여서 작성해야 합니다.

기존 변수를 export 하기

이미 만들어 놓은 변수를 나중에 환경변수로 바꾸는 것도 가능합니다.

USER_NAME=hong

이 상태에서 다음과 같이 입력합니다.

export USER_NAME

이제 USER_NAME은 환경변수로 사용할 수 있습니다.

따라서 아래와 같이 두 줄로 작성할 수도 있습니다.

USER_NAME=hong export USER_NAME

처음부터 한 줄로 작성해도 됩니다.

export USER_NAME=hong

실제 사용에서는 한 줄로 작성하는 방식을 자주 볼 수 있습니다.

환경변수 확인 + echo 사용법

특정 환경변수 확인하기

환경변수 값을 확인할 때 가장 간단하게 사용할 수 있는 명령어가 echo입니다.

echo $HOME

사용자의 홈 디렉터리가 표시됩니다.

예를 들면 다음과 같습니다.

/home/hong

다른 환경변수도 같은 방법으로 확인할 수 있습니다.

echo $PATHecho $USERecho $SHELL

여기서 $는 해당 변수에 들어 있는 값을 가져온다고 생각하면 이해하기 쉽습니다.

예를 들어 다음과 같이 변수를 만들었다고 하겠습니다.

NAME=kim

NAME은 변수의 이름입니다.

그리고 아래처럼 $를 앞에 붙이면 변수에 들어 있는 값을 가져옵니다.

echo $NAME

결과:

kim

printenv + 환경변수 전체 확인

등록된 환경변수 살펴보기

현재 등록되어 있는 환경변수를 확인하려면 printenv 명령어를 사용할 수 있습니다.

printenv

명령어를 실행하면 여러 환경변수가 화면에 표시됩니다.

특정 환경변수만 확인하는 것도 가능합니다.

printenv HOME

또는 PATH만 확인할 수도 있습니다.

printenv PATH

env 명령어도 많이 사용됩니다.

env

env를 입력하면 현재 쉘에서 사용할 수 있는 환경변수들을 확인할 수 있습니다.

특정 변수의 값만 간단하게 보고 싶다면 다음 방법이 편합니다.

echo $변수이름

환경변수를 여러 개 확인하고 싶다면 다음 명령어를 사용할 수 있습니다.

printenv

export PATH + 자주 만나는 예제

PATH 환경변수란?

export를 공부하다 보면 거의 반드시 PATH를 만나게 됩니다.

대표적으로 다음과 같은 명령어입니다.

export PATH=$PATH:/home/hong/bin

처음 보면 길고 복잡해 보이지만 부분별로 살펴보면 어렵지 않습니다.

PATH는 리눅스가 실행할 명령어를 어디에서 찾아야 하는지 알려주는 환경변수입니다.

현재 PATH 값을 확인해 보겠습니다.

echo $PATH

예를 들어 다음과 같은 값이 나올 수 있습니다.

/usr/local/bin:/usr/bin:/bin

여러 디렉터리가 : 기호를 기준으로 나뉘어 있습니다.

사용자가 터미널에서 명령어를 입력하면 리눅스는 PATH에 등록된 디렉터리를 찾아보면서 실행할 프로그램이 있는지 확인합니다.

기존 PATH에 디렉터리 추가하기

다음 명령어를 다시 보겠습니다.

export PATH=$PATH:/home/hong/bin

여기서 다음 부분은 기존 PATH 값을 의미합니다.

$PATH

그리고 다음 부분은 새롭게 추가하려는 디렉터리입니다.

/home/hong/bin

가운데 있는 :는 PATH에 여러 디렉터리를 구분해서 넣을 때 사용합니다.

따라서 아래 명령어는 기존 PATH 값을 그대로 남겨두면서 /home/hong/bin을 추가하는 것입니다.

export PATH=$PATH:/home/hong/bin

반대로 다음처럼 작성할 때는 주의해야 합니다.

export PATH=/home/hong/bin

이렇게 하면 기존 PATH 값을 새로운 값으로 바꿔버립니다.

기존에 등록되어 있던 /usr/bin, /bin 같은 위치가 빠질 수 있기 때문에 평소 사용하던 명령어를 Bash가 찾지 못하는 문제가 생길 수 있습니다.

기존 PATH에 새로운 디렉터리를 추가할 목적이라면 보통 다음 형태를 사용합니다.

export PATH=$PATH:/추가할/디렉터리

JAVA_HOME + 프로그램 설정 예제

JAVA_HOME 환경변수 만들기

Java를 설치하거나 Java 기반 프로그램을 설정하다 보면 JAVA_HOME이라는 환경변수를 자주 만나게 됩니다.

예를 들면 다음과 같습니다.

export JAVA_HOME=/usr/lib/jvm/java-17

이 명령어는 JAVA_HOME이라는 환경변수에 Java가 설치된 위치를 저장하는 것입니다.

값을 확인하려면 다음과 같이 입력합니다.

echo $JAVA_HOME

결과 예시:

/usr/lib/jvm/java-17

일부 Java 기반 프로그램은 실행할 때 JAVA_HOME을 확인해서 Java가 어디에 설치되어 있는지 찾습니다.

이처럼 환경변수는 프로그램이 실행될 때 필요한 설정값이나 위치를 알려주는 용도로 많이 사용됩니다.

export 설정 + 터미널 종료 관계

터미널에서 설정하면 계속 유지될까?

터미널에서 다음과 같이 입력했다고 가정해 보겠습니다.

export MY_NAME=hong

현재 터미널에서는 정상적으로 사용할 수 있습니다.

echo $MY_NAME

결과:

hong

하지만 터미널을 종료하고 새로 열면 MY_NAME이 사라질 수 있습니다.

터미널에서 직접 실행한 export 명령어는 기본적으로 현재 쉘 세션에서만 유효하기 때문입니다.

컴퓨터를 다시 켜거나 새로운 터미널을 실행했을 때도 계속 사용하고 싶다면 Bash가 시작될 때 읽는 설정 파일에 해당 명령어를 넣어두는 방법을 사용할 수 있습니다.

.bashrc 파일 + 계속 사용하는 방법

.bashrc에 export 추가하기

Bash를 사용하는 환경에서는 홈 디렉터리에 있는 .bashrc 파일을 자주 이용합니다.

예를 들어 다음 명령어로 파일을 열 수 있습니다.

nano ~/.bashrc

파일 아래쪽에 원하는 환경변수를 추가합니다.

export MY_NAME=hong

PATH를 추가하고 싶다면 다음과 같이 작성할 수 있습니다.

export PATH=$PATH:/home/hong/bin

파일을 저장한 뒤 새로운 터미널을 열면 설정한 내용을 사용할 수 있습니다.

다만 로그인 방식이나 사용 중인 리눅스 환경에 따라 .bash_profile, .profile 같은 다른 파일이 사용될 수도 있습니다.

현재 터미널에 바로 적용하기

.bashrc 파일을 수정한 다음 터미널을 새로 열지 않고 바로 적용하고 싶다면 source 명령어를 사용할 수 있습니다.

source ~/.bashrc

이후 환경변수 값을 확인합니다.

echo $MY_NAME

설정한 값이 표시된다면 현재 터미널에도 적용된 것입니다.

export 삭제 + unset 명령어

등록한 환경변수 없애기

환경변수를 더 이상 사용하지 않으려면 unset 명령어를 사용할 수 있습니다.

예를 들어 다음과 같이 환경변수를 만들었다고 하겠습니다.

export MY_NAME=hong

값을 확인합니다.

echo $MY_NAME

결과:

hong

이 환경변수를 삭제하려면 다음과 같이 입력합니다.

unset MY_NAME

다시 확인합니다.

echo $MY_NAME

이번에는 값이 나오지 않습니다.

따라서 환경변수를 등록할 때는 export, 없앨 때는 unset을 사용한다고 기억해 두면 편합니다.

export MY_NAME=hong

환경변수 등록

unset MY_NAME

환경변수 삭제

export 명령어 + 초보자 핵심 포인트

export를 한 문장으로 이해하기

export를 처음 배우는 단계라면 너무 어렵게 생각할 필요는 없습니다.

Bash에서 만든 변수를 현재 쉘에서 실행하는 프로그램과 하위 쉘에서도 사용할 수 있도록 환경변수로 만드는 명령어가 export입니다.

일반 변수를 만드는 방법은 다음과 같습니다.

NAME=hong

환경변수로 만들려면 export를 붙입니다.

export NAME=hong

값을 확인할 때는 다음처럼 입력합니다.

echo $NAME

환경변수를 없앨 때는 unset을 사용합니다.

unset NAME

현재 등록된 환경변수를 살펴보고 싶다면 다음 명령어를 사용할 수 있습니다.

printenv

새로운 터미널에서도 계속 사용할 환경변수라면 .bashrc 같은 설정 파일에 export 명령어를 넣을 수 있습니다.

export NAME=hong

수정한 .bashrc를 현재 터미널에서 다시 읽으려면 다음 명령어를 사용합니다.

source ~/.bashrc

처음에는 export라는 이름 때문에 어렵게 느껴질 수 있지만, 실제 사용 목적은 비교적 단순합니다.

프로그램이 함께 사용할 변수와 설정값을 환경변수로 등록하는 명령어라고 기억하면 됩니다.

특히 리눅스에서 Java, Python, Node.js 같은 개발 도구를 설치하거나 서버 프로그램을 설정하다 보면 PATH, JAVA_HOME 같은 환경변수를 자주 만나게 됩니다.

export가 어떤 역할을 하는지 알고 있으면 설치 안내에 나오는 명령어를 그대로 따라 입력하는 데서 끝나지 않고, 왜 필요한 명령어인지도 이해할 수 있습니다.

결론

리눅스 Bash 쉘에서 export는 변수를 환경변수로 지정할 때 사용하는 명령어입니다. 일반 변수는 현재 쉘에서만 사용할 수 있지만, export로 지정하면 현재 쉘에서 실행되는 프로그램이나 하위 쉘에서도 해당 값을 사용할 수 있습니다.

가장 기본적인 사용법은 다음과 같습니다.

export NAME=hong

환경변수의 값을 확인할 때는 echo를 사용할 수 있습니다.

echo $NAME

환경변수를 삭제할 때는 unset을 사용합니다.

unset NAME

또한 export PATH=$PATH:/추가할/디렉터리처럼 기존 PATH에 새로운 디렉터리를 추가하거나, JAVA_HOME처럼 프로그램에서 필요한 위치를 지정할 때도 자주 활용됩니다.

터미널에서 직접 입력한 export는 해당 쉘 세션이 끝나면 사라질 수 있습니다. 새로운 터미널에서도 계속 사용해야 한다면 .bashrc 등의 Bash 설정 파일에 export 명령어를 추가해서 사용할 수 있습니다.

처음 리눅스를 접했다면 export를 어렵게 생각하기보다 프로그램에서도 사용할 수 있도록 변수를 환경변수로 지정하는 명령어라고 기억해 두면 이해하기 쉽습니다.

FAQ

Bash에서 export는 무슨 뜻인가요?

export는 Bash에서 만든 변수를 환경변수로 지정하는 명령어입니다. 이렇게 지정된 변수는 현재 쉘뿐만 아니라 해당 쉘에서 실행되는 프로그램이나 하위 쉘에서도 사용할 수 있습니다.

export와 일반 변수는 어떤 차이가 있나요?

일반 변수는 NAME=hong처럼 만들며 기본적으로 현재 쉘에서 사용됩니다. 반면 export NAME=hong처럼 지정하면 NAME이 환경변수가 되어 현재 쉘에서 실행되는 다른 프로그램에도 전달될 수 있습니다.

export로 환경변수를 만드는 방법은 무엇인가요?

가장 간단한 방법은 변수 이름과 값을 한 번에 지정하는 것입니다.

export NAME=hong

이미 변수를 만들었다면 나중에 export만 적용할 수도 있습니다.

NAME=hong export NAME

두 방법 모두 NAME을 환경변수로 사용할 수 있게 해줍니다.

export로 만든 환경변수는 어떻게 확인하나요?

특정 환경변수의 값은 echo 명령어로 확인할 수 있습니다.

echo $NAME

현재 등록된 여러 환경변수를 확인하고 싶다면 다음 명령어를 사용할 수 있습니다.

printenv

또는 다음 명령어도 사용할 수 있습니다.

env

export를 입력했는데 터미널을 다시 열면 왜 사라지나요?

터미널에서 직접 실행한 export 명령어는 기본적으로 현재 쉘 세션에서만 적용됩니다. 터미널을 종료하면 해당 쉘도 끝나기 때문에 새 터미널에서는 이전에 지정한 환경변수가 존재하지 않을 수 있습니다.

export 설정을 계속 유지하려면 어떻게 하나요?

Bash를 사용한다면 .bashrc 같은 설정 파일에 export 명령어를 작성하는 방법이 많이 사용됩니다.

export NAME=hong

파일을 수정한 후 현재 터미널에서 바로 적용하려면 다음 명령어를 사용할 수 있습니다.

source ~/.bashrc

사용 환경에 따라 .bash_profile이나 .profile 등이 사용되는 경우도 있습니다.

export PATH=$PATH:/경로는 무슨 뜻인가요?

기존 PATH 값을 유지하면서 새로운 디렉터리를 추가한다는 뜻입니다.

export PATH=$PATH:/home/hong/bin

여기서 $PATH는 현재 저장되어 있는 기존 PATH 값을 의미하고, /home/hong/bin은 새롭게 추가하려는 디렉터리입니다. 가운데 :는 여러 디렉터리를 구분할 때 사용합니다.

export PATH=/경로처럼 작성해도 되나요?

명령어 자체는 사용할 수 있지만 주의해야 합니다.

export PATH=/home/hong/bin

이렇게 입력하면 기존 PATH 값에 추가되는 것이 아니라 새로운 값으로 바뀝니다. 기존에 등록되어 있던 명령어 검색 위치가 빠질 수 있으므로 새로운 디렉터리를 추가하려는 목적이라면 보통 $PATH를 함께 사용합니다.

export PATH=$PATH:/home/hong/bin

export JAVA_HOME은 왜 사용하는 건가요?

JAVA_HOME은 Java가 설치된 위치를 프로그램에 알려주기 위해 많이 사용하는 환경변수입니다.

export JAVA_HOME=/usr/lib/jvm/java-17

Java를 사용하는 일부 프로그램은 실행될 때 JAVA_HOME 값을 확인해 Java 설치 위치를 찾습니다.

export로 만든 환경변수를 삭제하려면 어떻게 하나요?

unset 명령어를 사용하면 됩니다.

unset NAME

이후 다음과 같이 확인했을 때 값이 나오지 않는다면 해당 변수가 삭제된 것입니다.

echo $NAME

export 명령어에서 = 앞뒤에 공백을 넣어도 되나요?

넣으면 안 됩니다. Bash에서 변수에 값을 지정할 때는 = 앞뒤를 붙여서 작성해야 합니다.

올바른 방법은 다음과 같습니다.

export NAME=hong

아래처럼 공백을 넣으면 Bash가 다른 방식으로 해석하기 때문에 원하는 결과가 나오지 않습니다.

export NAME = hong

같은 분류의 글

XP(eXtreme Programming) 모델 5대 가치
카톡에서 정보 얻기