Tcl 如何获得类似bash的环境变量值?
有这样一个字符串:Tcl 如何获得类似bash的环境变量值?,tcl,Tcl,有这样一个字符串:set mystring“$ENV\u NAME/c/a/b/c” 如何获得完整路径 要获取完整路径,您需要使用文件连接。要访问环境变量,您需要访问全局env数组: set fullPath [file join $env(ENV_NAME) c a b c] 如果ENV_NAME=/usr/bin,则上面的命令将返回完整路径,作为/usr/bin/c/a/b/c。您将在Windows平台上获得类似的结果。不幸的是,您的问题不是很清楚 您说您有字符串set mystring“
set mystring“$ENV\u NAME/c/a/b/c”
如何获得完整路径 要获取完整路径,您需要使用
文件连接
。要访问环境变量,您需要访问全局env
数组:
set fullPath [file join $env(ENV_NAME) c a b c]
如果
ENV_NAME=/usr/bin
,则上面的命令将返回完整路径
,作为/usr/bin/c/a/b/c
。您将在Windows平台上获得类似的结果。不幸的是,您的问题不是很清楚
您说您有字符串set mystring“$ENV_NAME/c/a/b/c”
,这可能意味着这是用户提供的输入,也可能是程序/Tcl脚本的一部分
- 如果这确实是用户提供的输入,我建议您使用
:eval
如果您可以信任用户,这很好,否则我建议使用。请注意,安全解释器无权访问proc substEnv {input} { set __ENV [array get ::env] dict with __ENV {} eval $input } puts [substEnv {set mystring "$ENV_NAME/c/a/b/c"}]
数组,因此必须将其内容传递给安全解释器::env
- 但是,如果这是您程序的一部分,我建议您使用
文件连接
set path [file join $::env(ENV_NAME) c a b c]
处理类似于file join
是根目录($::env(env_NAME)
在*nix上或/
在windows上,两者都以路径分隔符作为特例结束)C:\
set\uu ENV[array get::ENV];使用uu ENV{return[subst-nobackslashes-nocommands$input]}的dict
不完全正确。他想要这条路,这条路只是最后一部分。当然,subst[lindex$input end]
也可以这样做。