因此,可以说我的变量$a
是一个包含“ 1”和“ 2”作为字符串的数组。
$ a =“ 1”,“ 2”
现在,我想通过管道使用foreach
从每个值中减去1,所以我会做类似的事情
$ a | foreach {$ _ = [int] $ _-1}
但这似乎无能为力,但不会产生任何错误。因此$a
仍包含“ 1”和“ 2”。我很难理解我哪里出了错...如果我没有数组,这可能是可行的,所以这行得通:
$ b =“ 3”; $ b-2
它将返回1。所以我也尝试了不带“ [int]”的情况,但是仍然失败,所以我猜想它要么与管道有关,要么与我的foreach
有关,但我不知道为什么这样做。
有什么建议吗?
答案 0 :(得分:3)
您的foreach
不会像您认为的那样对原始数组中的项目进行突变-您将计算的值分配给上下文变量$_
,而不是更新数组索引。>
您可以使用以下计算的值创建一个新数组:
$a = $a | foreach { [int]$_ - 1 }
或就地改变原始数组中的项目:
for( $i = 0; $i -lt $a.Length; $i++ )
{
$a[$i] = [int]$a[$i] - 1
}
请注意,第二个示例也不完全符合您的想法:
PS> $b = "3"; $b - 2
1
PS> $b
3
$b - 2
部分是一个 expression ,它会被评估并回显到控制台-它不会更改$b
的值,因为您尚未分配结果表达式返回任何东西。
答案 1 :(得分:0)
只需将实例变量添加到循环的最后一行,就像这样:
$a = $a | foreach{$_ = [int]$_ - 1; $_}