代码之家  ›  专栏  ›  技术社区  ›  deostroll

多行字符串中未替换字符串变量

  •  16
  • deostroll  · 技术社区  · 11 年前

    以下是代码/输出的一体:

    PS C:\code\misc> cat .\test.ps1; echo ----; .\test.ps1
    $user="arun"
    $password="1234*"
    $jsonStr = @"
    {
            "proxy": "http://$user:$password@org.proxy.com:80",
            "https-proxy": "http://$user:$password@org.proxy.com:80"
    }
    "@
    del out.txt
    echo $jsonStr >> out.txt
    cat out.txt
    ----
    {
            "proxy": "http://1234*@org.proxy.com:80",
            "https-proxy": "http://1234*@org.proxy.com:80"
    }
    

    字符串变量的内容 $user 未替换为 $jsonStr .

    替换它的正确方法是什么?

    1 回复  |  直到 11 年前
        1
  •  29
  •   Matt    7 年前

    结肠是 scope 字符: $scope:$variable .Shell认为您正在调用变量 $password 从范围 $user 。您可能可以使用子表达式。

    $user="arun"
    $password="1234*"
    @"
    {
            "proxy": "http://$($user):$($password)@org.proxy.com:80",
            "https-proxy": "http://$($user):$($password)@org.proxy.com:80"
    }
    "@
    

    或者可以使用格式运算符

    $user="arun"
    $password="1234*"
    @"
    {{
            "proxy": "http://{0}:{1}@org.proxy.com:80",
            "https-proxy": "http://{0}:{1}@org.proxy.com:80"
    }}
    "@ -f $user, $password
    

    使用格式运算符时,请确保转义大括号。

    你也可以用反勾来逃避结肠

    $jsonStr = @"
    {
            "proxy": "http://$user`:$password@org.proxy.com:80",
            "https-proxy": "http://$user`:$password@org.proxy.com:80"
    }
    "@
    
    推荐文章