При передаче массива целых чисел переменная $_ равна нулю?

#powershell #pipe

#powershell #канал

Вопрос:

Возьмите это в качестве примера:

 $var = "one","two","three"
0..2 | select-object $var[$_]

Index operation failed; the array index evaluated to null.
At line:1 char:27
  0..2 | select-object $var[ <<<< $_]
      CategoryInfo          : InvalidOperation: (:) [], RuntimeException
      FullyQualifiedErrorId : NullArrayIndex
  

Почему значение $_ равно нулю?

Ответ №1:

Я не могу понять, почему вы используете select-object

попробуйте это:

 $var = "one","two","three"
0..2 | % { $var[$_]}
  

Ответ №2:

Вы также можете использовать select-object другим способом:

 $var | select -Index (0..2)
  

И кстати, если все, что вы хотите сделать, это извлечь элемент из массива, вы можете выполнить нарезку массива:

 $var[0..2]
  

Ответ №3:

Если вы хотите использовать select-object, вам нужно создать хэш-таблицу, известную как вычисляемое свойство, и присвоить ей имя и ключи выражения. Результатом будут объекты с одним свойством, var, в следующем примере

 0..2 | select @{name='var';expression={$var[$_]}}

var
---
one
two
three
  

Комментарии:

1. Это неправильный способ, который в данном случае может использоваться select. Смотрите мой ответ 🙂

2. это было дополнительное замечание, 1 за использование параметра index.

3. Вот почему can был выделен курсивом 🙂