가장 간단한 방법은 부모 프로세스에서 자식 프로세스에 상속되므로 변수를 환경 변수로 만드는 것입니다. (티클면에, 그들은 ::env
글로벌 배열의 요소있어, 상기 C 쉘 측에, 이들은 다른 모든 변수와 같이 판독 될 수 있지만 setenv
통해 설정 될 필요가있다.)
하나의 구성 파일이 공유 두 언어가 다른 구문을 사용하기 때문에 훨씬 더 어렵습니다. 따옴표 붙이는 방법으로 복잡한 것을 사용하지 않으면 Tcl이 C 셸 형식을 구문 분석하도록 만들 수 있습니다.
proc loadVariablesFromCshellFile {filename arrayName} {
upvar 1 $arrayName array
set f [open $filename]
while {[gets $f line] >= 0} {
if {[regexp {^\s*set (\w+)=([""'']?)(.*)\2\s*$} $line -> key quote value]} {
set array($key) $value
}
}
close $f
}
값 내부의 변수 대체를 처리하지 않기 때문에 완전한 코드가 아니지만 시작하는 것으로 충분합니다.
#!/usr/bin/env tclsh
proc loadVariablesFromCshellFile {filename arrayName} {
upvar 1 $arrayName array
set f [open $filename]
while {[gets $f line] >= 0} {
if {[regexp {^\s*set (\w+)=([""'']?)(.*)\2\s*$} $line -> key quote value]} {
set array($key) $value
}
}
close $f
}
loadVariablesFromCshellFile vars.sh myvars
puts $myvars(a)
은 전적으로 가능하지만 : 여기 당신이 그것을 사용하는 거라고 방법 (당신이 경우, 휴대 어렵게 꽤 달성 될 것입니다 또한 당신이 그 기능을 사용하지 않는 바랍니다.) 값을 Tcl 측의 스칼라 전역으로 곧바로 적재하면, 은 실제로이므로 Tcl 프로그램 외부의 소스에서 전역 변수 공간을 오염시키는 것으로 권장하지 않습니다.
감사합니다. 나는 env와 엉망이되고 싶지 않았다. 변수가 있지만 가장 빠르고 쉬운 솔루션이라고 생각합니다. – Wilderness