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

string variable not substituted in multi-line string

这是 code/output 合二为一的:

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

正确的替代方法是什么?

冒号是 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"
}
"@