그간 대충 사용해오고 있었으나, 개념을 명확히 설명해준 글을 발견하여 기록해둔다.
몇가지만 정리해보자면..
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)라고 부른다.
이 정도로 마무리.
1 thought on “Bash/Zsh : 변수 사용, 기초 개념.”