以下是代码/输出的全部内容:
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
的内容。
替换它的正确方法是什么?
答案 0 :(得分:13)
冒号是scope字符:$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`:$password@org.proxy.com:80",
"https-proxy": "http://$user`:$password@org.proxy.com:80"
}
"@