Я много видел в PowerShell, но что он делает?
$_
Я много видел в PowerShell, но что он делает?
$_
Это переменная для текущего значения в конвейерной линии, которая в Powershell 3 и более поздней $PSItem
называется $PSItem
.
1,2,3 | %{ write-host $_ }
или же
1,2,3 | %{ write-host $PSItem }
Например, в приведенном выше коде блок %{}
вызывается для каждого значения в массиве. Переменная $_
или $PSItem
будет содержать текущее значение.
Я думаю, что самый простой способ подумать об этой переменной, такой как входной параметр в выражении лямбда в С#. То есть $_
похож на 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
Согласно этот веб-сайт, это ссылка на this
, в основном в циклах.
$_ (подчеркивание доллара) 'THIS' токен. Обычно это относится к элемент внутри цикла foreach. Задача: Распечатайте все элементы в коллекции. Решение.... | foreach {Write-Host $_}
$ _ - это псевдоним автоматической переменной $ PSItem (представлен в PowerShell V3.0; здесь приведена информация об использовании), которая представляет текущий элемент из канала.
Онлайн-документация по PowerShell (v6.0) для автоматических переменных находится здесь.
$_ - это переменная, которая выполняет итерацию по каждому объекту/элементу, переданному из предыдущего | (Труба).
$_
- это переменная, созданная системой, обычно внутри блочных выражений, на которые ссылаются командлеты, которые используются с каналом, например Where-Object
и ForEach-Object
.
Но он может также использоваться в других типах выражений, например, с Select-Object
в сочетании с свойствами выражения. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
. В этом случае $_
представляет элемент, который передается по каналам, но могут существовать несколько выражений.
На него также можно ссылаться на проверку пользовательских параметров, где для проверки значения используется блок script. В этом случае $_
представляет значение параметра, полученное от вызова.
Ближайшая аналогия с С# и java является выражением lamda. Если вы разбиваете PowerShell на основы, то все это script, включая файл script a, функции и командлеты. Вы можете определить свои параметры, но в некоторых случаях система создается для вас, которая представляет элемент ввода для обработки/оценки. В таких ситуациях автоматическая переменная $_
.
это означает, что ваши деньги стоят грязи.