如何在数组内(在Powershell中)使用数字字符串进行操作?

时间:2019-10-22 19:14:09

标签: arrays powershell foreach

因此,可以说我的变量$a是一个包含“ 1”和“ 2”作为字符串的数组。

  

$ a =“ 1”,“ 2”

现在,我想通过管道使用foreach从每个值中减去1,所以我会做类似的事情

  

$ a | foreach {$ _ = [int] $ _-1}

但这似乎无能为力,但不会产生任何错误。因此$a仍包含“ 1”和“ 2”。我很难理解我哪里出了错...如果我没有数组,这可能是可行的,所以这行得通:

  

$ b =“ 3”; $ b-2

它将返回1。所以我也尝试了不带“ [int]”的情况,但是仍然失败,所以我猜想它要么与管道有关,要么与我的foreach有关,但我不知道为什么这样做。

有什么建议吗?

2 个答案:

答案 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; $_}