Что означает $_ в PowerShell?

Я много видел в PowerShell, но что он делает?

$_

Ответ 1

Это переменная для текущего значения в конвейерной линии, которая в Powershell 3 и более поздней $PSItem называется $PSItem.

1,2,3 | %{ write-host $_ } 

или же

1,2,3 | %{ write-host $PSItem } 

Например, в приведенном выше коде блок %{} вызывается для каждого значения в массиве. Переменная $_ или $PSItem будет содержать текущее значение.

Ответ 2

Я думаю, что самый простой способ подумать об этой переменной, такой как входной параметр в выражении лямбда в С#. То есть $_ похож на x в x => Console.WriteLine(x) анонимной функции в С#. Рассмотрим следующие примеры:

PowerShell:

1,2,3 | ForEach-Object {Write-Host $_}

Печать

1
2
3

или

1,2,3 | Where-Object {$_ -gt 1}

Печать

2
3

И сравните это с синтаксисом С# с помощью LINQ:

var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));

Печать

1
2
3

или

list.Where( _ => _ > 1)
    .ToList()
    .ForEach(s => Console.WriteLine(s));

Печать

2
3

Ответ 3

Согласно этот веб-сайт, это ссылка на this, в основном в циклах.

$_ (подчеркивание доллара) 'THIS' токен. Обычно это относится к элемент внутри цикла foreach. Задача: Распечатайте все элементы в коллекции. Решение.... | foreach {Write-Host $_}

Ответ 4

$ _ - это псевдоним автоматической переменной $ PSItem (представлен в PowerShell V3.0; здесь приведена информация об использовании), которая представляет текущий элемент из канала.

Онлайн-документация по PowerShell (v6.0) для автоматических переменных находится здесь.

Ответ 5

$_ - это переменная, которая выполняет итерацию по каждому объекту/элементу, переданному из предыдущего | (Труба).

Ответ 6

$_ - это переменная, созданная системой, обычно внутри блочных выражений, на которые ссылаются командлеты, которые используются с каналом, например Where-Object и ForEach-Object.

Но он может также использоваться в других типах выражений, например, с Select-Object в сочетании с свойствами выражения. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}. В этом случае $_ представляет элемент, который передается по каналам, но могут существовать несколько выражений.

На него также можно ссылаться на проверку пользовательских параметров, где для проверки значения используется блок script. В этом случае $_ представляет значение параметра, полученное от вызова.

Ближайшая аналогия с С# и java является выражением lamda. Если вы разбиваете PowerShell на основы, то все это script, включая файл script a, функции и командлеты. Вы можете определить свои параметры, но в некоторых случаях система создается для вас, которая представляет элемент ввода для обработки/оценки. В таких ситуациях автоматическая переменная $_.

Ответ 7

это означает, что ваши деньги стоят грязи.