-1

有一个这样的字符串:set mystring "$ENV_NAME/c/a/b/c"

如何获得完整路径?

4

2 回答 2

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 平台上你会得到类似的结果。

于 2013-08-26T20:02:15.950 回答
1

不幸的是,你的问题不是很清楚。

你说你有 string 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数组,因此您必须将其内容传递给安全解释器。

  • 但如果这是你程序的一部分,我建议你file join改用

    set path [file join $::env(ENV_NAME) c a b c]
    

    file join处理诸如$::env(ENV_NAME)根目录之类的事情(/在 *nix 或C:\windows 上,它们都以路径分隔符结尾作为特殊情况)

于 2013-08-27T00:13:26.327 回答