【问题标题】:string variable not substituted in multi-line string字符串变量未在多行字符串中替换
【发布时间】:2015-04-02 05:19:26
【问题描述】:

这是代码/输出的全部内容:

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替换。

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

【问题讨论】:

    标签: string powershell concatenation multiline substitution


    【解决方案1】:

    冒号是scope 字符:$scope:$variable。 PowerShell 认为您正在从范围 $user 调用变量 $password。您也许可以摆脱子表达式。

    $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"
    }
    "@
    

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多