gpt4 book ai didi

powershell - 链式 powershell 替换命令是否一个接一个地执行?

转载 作者:行者123 更新时间:2023-12-01 12:12:47 26 4
gpt4 key购买 nike

这可能不是专业正则表达式理解的问题。唯一重要的是因为我正在运行多个链式替换命令,这些命令会影响文本文件中的某些相同文本。我还想象在替换之前,根据分隔符词(需要多次替换)的使用方式对 txt 文件进行分区会有所帮助。话虽如此,powershell 的基本结构知识很有用,但我还没有找到很多有用的资源(欢迎提出建议!)。

问题:链式 powershell 替换命令是否一个接一个地执行?

 -replace "hello:","hello " `
-replace "hello ","hello:"
} | out-file ...

上面这个愚蠢的例子会产生 hello:'s 的地方最初有 hello:'s 吗?

通过一些项目的工作,我发现上面的大部分时间都有效。然而,似乎总是存在一些边缘情况。这是脚本的另一个方面,还是链式命令(相当数量)执行的顺序从不可变?

最佳答案

您拥有的是运算符,而不是命令。

我这么说并不是为了迂腐,而是因为“命令”在 PowerShell 中具有特定含义(它是一个包含函数、cmdlet、别名、应用程序、过滤器、配置(这是 DSC 构造)、工作流、和脚本),并且因为它们一起使用的方式是不同的。

大多数运算符都是以 - 开头的保留字(但其他东西也算作运算符,例如转换),您确实可以将它们链接在一起使用。 它们也是按顺序执行的。

我需要澄清;它们不一定按照您混合 运算符时给定的顺序执行。多个相同的运算符会因为它们都具有相同的优先级,但你应该检查 about_Operator_Precedence查看组合它们时将使用的顺序。

请注意,某些运算符可能会“短路”(这听起来像是故障,但事实并非如此),即某些 bool 运算符的结果如果 bool 结果无法更改,则不会评估以后的操作。

例如:

$true -or $false

在这个例子中,表达式的 $false 部分永远不会被计算。如果表达式的下一部分很复杂甚至无效,这一点很重要。考虑这些:

$true -or $(throw)
$false -or $(throw)

第一个将返回 $true,因为(大概)接下来的表达式中没有任何内容可以使它成为 $false

第二行必须计算第二个表达式,这样做时它抛出一个异常,使程序停止。

因此,除此之外,是的,您可以继续链接您的运营商。如果运算符本身位于末尾,则您也不需要在行尾使用续行符(反引号 `)。对 bool 运算符更有用:

$a -and
$b -or
$c -xor
$false

替换之类的东西有点尴尬:

'apple' -replace
'p',
'z'

关于这个:

And only matters because I am running multiple chained replace commands that affect some of the same text in a text file.

这些运算符不会触及文件中的任何内容,它们会处理内存中的数据,作为脚本中的文字或变量(然后你用它做什么,就像写入文件是你的事)。

此外,即使这样它也不会更改变量中已有的任何值,它会返回新值,您可以将其分配给变量或以任何其他方式使用。

$var = 'apple'
$var -replace 'p','Z'
$var

替换的值将被返回,但没有对其进行任何处理,因此它会输出到控制台。然后你可以看到 $var 根本没有被修改,相反:

$var = 'apple'
$var = $var -replace 'p','Z'
$var

$var 的值被覆盖了。

如果存在边缘情况,则很可能是对事件顺序中某些事物的误解(不正确的正则表达式、未分配或使用值、不正确的逻辑等),因为操作顺序将是一致的.如果您有任何此类极端情况,请发布!

关于powershell - 链式 powershell 替换命令是否一个接一个地执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478446/

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