有一个这样的字符串:set mystring "$ENV_NAME/c/a/b/c"
如何获得完整路径?
答案 0 :(得分:3)
要获得完整路径,您需要使用file join
。要获取环境变量,您需要访问全局env
数组:
set fullPath [file join $env(ENV_NAME) c a b c]
如果ENV_NAME=/usr/bin
,则上述内容会将fullPath
作为/usr/bin/c/a/b/c
返回。您将在Windows平台上获得类似的结果。
答案 1 :(得分:1)
不幸的是,你的问题不是很明确。
你说你有字符串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"}]
如果你可以信任用户,这很好,否则我建议使用safe interpreter。请注意,安全解释器无法访问::env
数组,因此您必须将其内容传递给安全解释器。
但如果这是您的计划的一部分,我建议您使用file join
代替
set path [file join $::env(ENV_NAME) c a b c]
file join
处理$::env(ENV_NAME)
之类的内容是根目录({nix上的/
或Windows上的C:\
,它们都以路径分隔符结尾为特例)