gpt4 book ai didi

powershell - 为什么有些数组在 PowerShell 中相互镜像?

转载 作者:行者123 更新时间:2023-12-04 17:31:24 24 4
gpt4 key购买 nike

我正在使用 PowerShell 2.0。当我创建一个新变量作为数组,然后将另一个变量设置为等于第一个变量时,第二个变量“反射(reflect)”第一个变量。更改原始数组中的对象后,完全相同的更改出现在第二个数组中。例如,

$array0001 = 6, 7, 3, 4, 0
$array0002 = $array0001
$array0001[3] = 55
$array0002

输出为
6
7
3
55
0

我注意到,当您将第二个变量设置为与第一个变量具有相同的值时,除了这次包含在子表达式运算符中之外,对第一个数组的修改不会影响第二个数组。例如,
$array0001 = 6, 7, 3, 4, 0
$array0002 = $($array0001)
$array0001[3] = 55
$array0002

输出为
6
7
3
4
0

为什么将值括在子表达式运算符中会改变变量的行为?是否有另一种或更好的方法来避免使数组变量相互“镜像”?

ETA:我现在发现 $array0002 = @($array0001)$array0002 = &{$array0001}两者都实现了完全相同的目标。

最佳答案

它被称为“通过引用传递”。您不是实际分配值,而是将引用分配给另一个保存值的位置。如果原始位置中的值发生更改,则您所做的引用将指向该原始位置,并将看到更新后的值。

大多数语言都有“按引用传递”和“按值传递”的方法。这就是你通过做$array0002=$($array0001)发现的.没有一个比另一个更好,它们只是有不同的用途。

在 PowerShell 中,您还可以输入 .value在您的引用后面获取值,而不是引用。

关于powershell - 为什么有些数组在 PowerShell 中相互镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442966/

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