Я пытаюсь понять, почему следующие два утверждения дают разные результаты:
&{,$null} | % {'x'} # x
&{,(1)[1]} | % {'x'} # no output
,$null
и ,(1)[1]
кажутся массивами, содержащими один нулевой элемент. Однако они ведут себя по-разному во время вывода из блока сценария. Что здесь происходит?
Второй возвращает AutomationNull.Value
который не перечисляется конвейером.
Перечисляется $null
.
См., Например, реализацию foreach:
https://github.com/PowerShell/PowerShell/blob/bcf86d4f8a1ce0ef11f0e9100490e790fb067574/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs#L2748
Спасибо @powercode. Для других читателей вот несколько ресурсов по AutomationNull
:
@ alx9r : Это сводится к вопросу, который вы позже задали в # 6436 и который я выделил в https://github.com/PowerShell/PowerShell/issues/6436#issuecomment -375151317, но я решил создайте для него отдельный выпуск: # 6823