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

2024-03-02

这是代码/输出:

PS C:\code\misc> cat .\test.ps1; echo ----; .\test.ps1
$user="arun"
$password="1234*"
$jsonStr = @"
{
        "proxy": "http://$user:[email protected] /cdn-cgi/l/email-protection:80",
        "https-proxy": "http://$user:[email protected] /cdn-cgi/l/email-protection: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 https://technet.microsoft.com/en-us/library/hh847849.aspx特点:$scope:$variable。 PowerShell 认为您正在调用该变量$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`:[email protected] /cdn-cgi/l/email-protection:80",
        "https-proxy": "http://$user`:[email protected] /cdn-cgi/l/email-protection:80"
}
"@
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串变量未在多行字符串中替换 的相关文章

随机推荐