PowerShell拼接时如何保留变量中的大括号({})及正确格式
PowerShell字符串拼接丢失大括号的解决方法
你的代码里变量定义用了双引号字符串,PowerShell会自动解析双引号内的{}:如果大括号中没有可执行的表达式,就会被直接移除,导致输出里丢失了包裹每个键值对的大括号。另外当前拼接逻辑是直接连接字符串,没有添加你期望的逗号分隔符。
下面是两种解决方法:
方法1:使用单引号定义字符串(推荐)
单引号在PowerShell中属于原样字符串,不会解析任何变量或特殊语法,能完整保留大括号和原始字符串内容:
$var1 = '{"1234-TEST-NICE":"$(Buildnumber)-$(BranchName)"}' $var2 = '{"1234-NCPT-NOT":"$(Buildnumber)-$(BranchName)"}' $var3 = '{"123478-NCP-POT":"$(Buildnumber)-$(BranchName)"}' $var4 = '{"1234-RICE-MICE":"$(Buildnumber)-$(BranchName)"}' $result = @() if ($var1) { $result += $var1 } if ($var2) { $result += $var2 } if ($var3) { $result += $var3 } if ($var4) { $result += $var4 } # 用逗号分隔每个元素,符合期望的输出格式 $resultString = $result -join ',' Write-Output $resultString
方法2:双引号中转义大括号
如果必须使用双引号字符串,需要把每个{写成{{,每个}写成}},PowerShell会将两个连续的大括号解析为一个单独的大括号。同时如果要保留$(Buildnumber)这种字符串形式,需要把$转义为$避免被提前解析:
$var1 = "{{\"1234-TEST-NICE\":\"`$(Buildnumber)-`$(BranchName)\"}}" $var2 = "{{\"1234-NCPT-NOT\":\"`$(Buildnumber)-`$(BranchName)\"}}" $var3 = "{{\"123478-NCP-POT\":\"`$(Buildnumber)-`$(BranchName)\"}}" $var4 = "{{\"1234-RICE-MICE\":\"`$(Buildnumber)-`$(BranchName)\"}}" $result = @() if ($var1) { $result += $var1 } if ($var2) { $result += $var2 } if ($var3) { $result += $var3 } if ($var4) { $result += $var4 } $resultString = $result -join ',' Write-Output $resultString
修改后执行代码,输出会和你的期望一致:每个键值对被{}包裹,元素之间用逗号分隔。
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

