在C shell中设置的shell变量如何传播到Tcl shell?

编程语言 2026-07-09

我确实在c-shell和 tclsh提示符下尝试了下方展示的命令及输出。想了解尽管这些setenv环境变量已在tclsh环境中被证明已设置,仍然没有传播。

c-shell> setenv FOO bar
c-shell> echo $FOO
bar
c-shell> tclsh
% puts $env(FOO)
bar
% if {[info exists $env(FOO)] && $env(FOO)=="bar"} {puts "Hello"} else {puts "World"}
World

让我困惑的是,在tclsh中,$env(FOO) 的结果等同于 puts $env(FOO),返回值是bar

% puts $env(FOO)
bar

然而,$env(FOO) 被求值为“0”,因此输出“World”。为什么 $env(FOO) 会被求值为“0”,我还没搞明白。

% if {[info exists $env(FOO)]} {puts "Hello"} else {puts "World"}
World

解决方案

问题已经找到了。问题出在

if {[info exists $env(FOO)]}

不应该出现 $.

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章