gpt4 book ai didi

powershell - 如何在powershell中转义花括号{...}?

转载 作者:行者123 更新时间:2023-12-03 08:28:56 26 4
gpt4 key购买 nike

我需要生成多行带有 GUID 的 xml 标记:

<xmltag_10 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/>
<xmltag_11 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/>

等等

我在一个循环中有这条线,每次迭代都会生成 $guid,它打印 guid 而不使用大括号
Write-Host ('<xmltag_{0} value="{1}"/>' -f $i,$guid)
<xmltag_10 value="ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ"/>

添加一组花括号,我得到
Write-Host ('<xmltag_{0} value="{{1}}"/>' -f $i,$guid)
<xmltag_10 value="{1}"/>

我如何逃避外部花括号?我试过使用 `{{1}`} 来逃避,但我得到了
Error formatting a string: Input string was not in a correct format..

添加我的复制和测试代码:
$i=10
while($i -lt 21)
{
$guid = ([guid]::NewGuid()).ToString().ToUpper();
Write-Host ('<xmltag_{0} value="{1}"/>' -f $i,$guid)
$i++
}

最佳答案

要逃避花括号,只需将它们加倍:

'{0}, {{1}}, {{{2}}}' -f 'zero', 'one', 'two'
# outputs:
# zero, {1}, {two}
# i.e.
# - {0} is replaced by zero because of normal substitution rules
# - {{1}} is not replaced, as we've escaped/doubled the brackets
# - {2} is replaced by two, but the doubled brackets surrounding {2}
# are escaped so are included in the output resulting in {two}

所以你可以这样:
Write-Host ('<xmltag_{0} value="{{{1}}}"/>' -f $i,$guid)

然而; 在您的场景中,您不需要使用 -f ;如果您需要使用文字花括号,它就不合适了。尝试这个:

$i=10
while($i -lt 21)
{
$guid = ([guid]::NewGuid()).ToString().ToUpper();
Write-Host "<xmltag_$i value=`"$guid`"/>"
$i++
}

这在双引号字符串中使用常规变量替换(但它确实需要使用 `"转义双引号(反引号是转义字符)。

另一种选择是使用 format specifier .即格式 B导致 GUID 被大括号包围。遗憾的是,它还将 GUID 格式化为小写,因此如果输出的大小写是您要求的一部分,这将是不合适的。
Write-Host ('<xmltag_{0} value="{1:B}"/>' -f $i, $guid)

关于powershell - 如何在powershell中转义花括号{...}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com