首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PowerShell中调用ExpandString时如何转义字符串变量

在PowerShell中调用ExpandString时如何转义字符串变量
EN

Stack Overflow用户
提问于 2018-05-30 08:38:53
回答 1查看 1.8K关注 0票数 3

我有一个将JSON文件作为参数并将其转换为object的PowerShell脚本。在JSON字符串(作为模板)中,可能有一些变量应该在运行时替换为实际值。例如,JSON字符串中的$var_1$var_x$var_y

代码语言:javascript
复制
{
    "key1": "My name is ${var_1}",
    "key2":
    {
        "key3": "Another variable ${var_x}",
        "key4": "${var_y}"
    }
}

这些变量的名称对于脚本来说是未知的。我使用ExpandString来完成这项工作:

代码语言:javascript
复制
[string]$jsonText = Get-Content $inputFile;

if ([string]::IsNullOrWhiteSpace($jsonText)) {
    throw "No content in $inputFile"
}
$temp = $ExecutionContext.InvokeCommand.ExpandString($jsonText);
$jsonObj = ConvertFrom-Json $temp;

问题是,当变量包含双引号时,调用ConvertFrom-Json将失败,因为引号没有转义。例如,"My name is ${var_1}"可能会变成"My name is a "new" name"

有没有办法在调用ExpandString时对这些字符串变量进行转义?

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 11:42:54

这种格式是允许的吗?如果变量用""括起来,那么它就是一个字符串,并且不会在.json中添加标记。例如:

代码语言:javascript
复制
$var_1 = "Json Sample"
$json_piece = @"
{
    "key1": "My name is $var_1",
    "key2":
    {
        "key3": "Another variable $var_2",
        "key4": "$var_3"
    }
}
"@

It输出(未定义$var_2和$var_3 ):

代码语言:javascript
复制
{
    "key1": "My name is Json Sample",
    "key2":
    {
        "key3": "Another variable ",
        "key4": ""
    }
}

如果将"添加到json文件中,如下所示:

代码语言:javascript
复制
{
    "key1": "My name is "Json Sample"",
    "key2":
    {
        "key3": "Another variable ",
        "key4": ""
    }
}

你会犯一个错误:除了逗号。这意味着如果变量包含"",您必须首先对它们进行转义,否则.json文件是意外的。

附注:Validation我在FREEFORMATTER.COM上验证过了。

这是我的代码:

代码语言:javascript
复制
{
  "Key": "value is "value"",
  "key2": "other value"
}

我得到了两个错误:

  • 根据RFC4627 (JSON规范),JSON输入无效。位置20处的意外标记v.
  • JSON输入在JavaScript中无效,属性列表(第2行)后缺少},(位置#24)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50594839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档