Bash/Zsh : 변수 사용, 기초 개념.

그간 대충 사용해오고 있었으나, 개념을 명확히 설명해준 글을 발견하여 기록해둔다.

몇가지만 정리해보자면..

declare 의 의미/역할

예전부터 궁금했었다. declare 가 뭔지.
어떤 경우 이게 써 있을 때도 있고, 아닐 때도 있었는데..
오늘, 확실히 알게 됐다.

위 글에 언급된 바로는, 원래는 변수 선언에 필요한 문법이었지만, 굳이 쓰지 않아도 그냥 인식된다고 한다.

다만, 이게 꼭 필요할 때가 있다.
bash 에서 export 를 해보면, 다음과 같은 화면을 볼 수 있다.

$ export
declare -x CLUTTER_IM_MODULE="xim"
declare -x COLORTERM="truecolor"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-cc9xyewbbE,guid=76247eb74957a14b0156f47c5d64ac78"
declare -x DEFAULTS_PATH="/usr/share/gconf//usr/share/xsessions/plasma.default.path"
declare -x DESKTOP_SESSION="/usr/share/xsessions/plasma"
declare -x DISPLAY=":0"
declare -x GPG_AGENT_INFO="/run/user/1000/gnupg/S.gpg-agent:0:1"
declare -x GS_LIB="/home/nemoneon/.fonts"
declare -x GTK2_RC_FILES="/etc/gtk-2.0/gtkrc:/home/nemoneon/.gtkrc-2.0:/home/nemoneon/.config/gtkrc-2.0"
.....

여기에서 declare -x 는, 이 변수들을 export 하라는 뜻이 담겨 있다. (이유는 모르지만, zsh 에서 같은 명령을 내리면 declare -x 는 없다.)

아무튼, 일반 변수를 설정할 때는 declare 를 굳이 쓸 필요가 없다.
그러나 만약, 변수를 특정하고 싶을 때, 다시 말해 배열로 만들고 싶다거나 정수로 설정하고 싶을 경우엔 declare 에 선택사항을 부가하여 사용할 수 있다.

export ??

이 명령이 그저 환경변수를 출력해주는 역할만 하는 줄만 알았었으나.. 보다 깊은 뜻이 숨어있었다는 사실을 오늘에야 알았다.
위의 declare -x 와 같은 기능을 하는데, 역시 위 글에 자세히 설명되어 있다.

예를 들어, 다음 명령을 보자.

$ foo="아아아아"
$ echo $foo
아아아아
$ bash
$ echo $foo

변수 foo 를 정의했으나, 새로운 bash shell 을 불러온 순간 foo 는 사라져버렸다.
이건 foo 가 로컬변수이기 때문이다. 이걸, 하위 Shell 에서도 접근하게 만들고 싶을 때 export 를 사용한다.

$ export bar="아아아아"
$ echo $bar
아아아아
$ bash
$ echo $bar
아아아아

bash 에서 또 bash 를 호출해도, 그 bash 에서 zsh 를 호출해도 bar 는 여전히 살아있다.
이렇게 export 로 ‘전역변수’가 된 것들을 리눅스에선 환경변수(Environmental Variables)라고 부른다.

이 정도로 마무리.

Tags:, ,
One Comment

안녕하세요. 글 남겨주셔서 고맙습니다.