foreach($i in $a){$i="kkk"+$i-6ren">
gpt4 book ai didi

powershell - Powershell:为什么不能使用ForEach-Object修改元素?

转载 作者:行者123 更新时间:2023-12-03 00:23:27 26 4
gpt4 key购买 nike

我有一个数组定义:

> $a={"abc","xyz","hello"}
然后,使用foreach对其进行修改,但似乎原始元素没有更改:
> foreach($i in $a){$i="kkk"+$i}
> $a
> "abc","xyz","hello"
为什么foreach循环不修改元素?
然后我尝试使用ForEach-Object,这一次它甚至没有运行:
> $a|%{$_=$_+"kkk"}
Method invocation failed because [System.Management.Automation.ScriptBlock] does not contain a method named 'op_Addition'.
At line:1 char:6
+ $a|%{$_=$_+"kkk"}
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
这有语法错误吗?还是我的理解不正确?

最佳答案

您在$a中没有数组,您在[ScriptBlock]中。花括号{}表示PowerShell中的脚本块。
数组运算符是@()
这是第二个示例中导致错误的原因。

$a=@("abc","xyz","hello")

foreach($i in $a) {
$i = "zzz" + $i
}

$a | % { $_ += "zzz" }
但是,这仍然不起作用,因为 $i$_是副本,而不是对原始数组位置的引用。
相反,您可以使用常规的 for循环遍历数组:
for( $i = 0 ; $i -lt $a.Count ; $i++ ) {
$a[$i] += "zzz"
}
在此示例中,您可以看到在循环主体中,您直接引用 $a中的数组并修改其实际值。
还要注意 ForEach-Object( %)返回一个值(或从该块返回的所有值),因此您也可以这样做:
$a = $a | % { "qqq" + $_ }
但是,这将形成一个全新的数组并将其分配给 $a,而不是真正修改原始数组。

关于powershell - Powershell:为什么不能使用ForEach-Object修改元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30994126/

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