【问题标题】: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"
}
"@