-1

次のような文字列があります。set mystring "$ENV_NAME/c/a/b/c"

フルパスを取得するには?

4

2 に答える 2

3

フル パスを取得するには、 を使用する必要がありますfile joinenv環境変数にアクセスするには、グローバル配列にアクセスする必要があります。

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

残念ながら、あなたの質問はあまり明確ではありません。

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 に答える