Powershell array assignment присваивает переменную, а не значение?

У меня есть пример программы, которая создает массив, а затем пытается присвоить значение этого массива несколько раз в другой массив как многомерный массив.

$a =@(0,0,0)
$b = @($a,$a,$a)
$b[1][2]=2
$b
'And $a is changed too:'
$a

На выходе получается:

PS E:\Workarea> .\what.ps1
0
0
2
0
0
2
0
0
2
And $a is changed too:
0
0
2

Таким образом, в данном случае переменная фактически указывает на исходную переменную. Это очень неожиданное поведение. Это довольно аккуратно, что можно сделать это, хотя я никогда не использовал союзы так часто в программировании на Си. Но я хотел бы найти способ просто присваивать значение, а не переменную.

$b = @($a.clone(),$a.clone(),$a.clone())

Думаю, это сработает, но что-то мне подсказывает, что может быть что-то более элегантное, чем это.

Спасибо за информацию.

Это PowerShell 2.0 под Windows 7 64-bit.

5
задан JasonMArcher 1 January 2015 в 23:59
поделиться