You are here

subst 커맨드: 특정값을 가진 변수이름을 다른 변수에 넣어 사용하기

bonkora의 아바타

제목만 봐서는 어떤 내용인지 얼른 이해가 안되실 것 같습니다.
예를 들어서 a라는 변수에 100이라는 값을 넣고
b라는 이름의 변수에다가는 a라는 변수의 이름을 넣은 후
변수 b를 이용하여 변수 a의 값인 100을 얻고 싶다면
어떻게 하면 될까 하는 것입니다.

이런 것을 써먹을 곳이 있겠냐 싶은데,
가끔은 필요할 때가 있더군요.
이럴 때 필요한 것이 subst 커맨드입니다.

책에는 subst 커맨드에 대해 이렇게 설명하고 있습니다.
"어떠한 커맨드도 호출하지 않고,
커맨드와 변수 대입을 하기 위해 사용한다.
대입순환을 한다는 점은 eval과 유사하나
커맨드로써 그 결과를 해석하려 시도하지 않는다."

실례를 들어보겠습니다.
변수 han에다가 "한글"이라는 값을 넣습니다.
변수 var에다가는 변수 이름인 "han"을 넣습니다.
그런 후 변수이름 var를 이용하여 변수 han의 값인
"한글"을 얻는 것입니다.
아래의 예에서 "=>" 다음에 나오는 것은
Tcl 인터프리터가 준 반응입니다.

set han "한글"
=> 한글
set var han
=> han
puts $var
=> han
puts [subst $var]
=> han
puts $[subst $var]
=> $han
puts [subst $[subst $var]]
=> 한글

또 다른 예입니다.
변수의 이름에 일련번호를 붙여서
루프를 이용하여 변수가 갖고 있는 값을 출력하는 것입니다.

set lang1 "한국어"
=> 한국어
set lang2 "영어"
=> 영어
set lang3 "일본어"
=> 일본어
set lang4 "중국어"
=> 중국어
for {set i 1} {$i <= 4} {incr i} {puts [subst $[subst lang$i]]}
=> 한국어
=> 영어
=> 일본어
=> 중국어
포럼: