如何获得像环境变量值的bash?

时间:2013-08-26 16:21:53

标签: tcl

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

如何获得完整路径?

2 个答案:

答案 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:\,它们都以路径分隔符结尾为特例)