Я много раз видел следующее в PowerShell, но что именно он делает?
$_
Это переменная для текущего значения в конвейере, которая в Powershell 3 и новее называется $PSItem
.
1,2,3 | %{ write-host $_ }
или
1,2,3 | %{ write-host $PSItem }
Например, в приведенном выше коде блок %{}
вызывается для каждого значения в массиве. Переменная $_
или $PSItem
будет содержать текущее значение.
Согласно сайту this, это ссылка на this
, в основном в циклах.
$_ (долларовое подчеркивание) Токен 'THIS'. Обычно ссылается на элемент внутри цикла foreach. Задача: Вывести все элементы в коллекции. Решение. ... | foreach { Write-Host $_ }
Я думаю, что проще всего представить эту переменную как входной параметр в лямбда-выражении в C#. т.е. $_
аналогичен x
в анонимной функции x => Console.WriteLine(x)
в C#. Рассмотрим следующие примеры:
PowerShell:
1,2,3 | ForEach-Object {Write-Host $_}
Отпечатки:
1
2
3
или
1,2,3 | Where-Object {$_ -gt 1}
Отпечатки:
2
3
И сравните это с синтаксисом C#, используя 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
$_ — это переменная, которая перебирает каждый объект/элемент, переданный из предыдущего | (трубка).