Co oznacza $ w PowerShell?

Widziałem następujące wiele w PowerShell, ale co to dokładnie robi?

$_
 183
Author: Peter Mortensen, 2010-08-16

6 answers

Jest to zmienna dla bieżącej wartości w linii potoku, która jest wywoływana $PSItem w Powershell 3 i nowszych.

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

Lub

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

Na przykład w powyższym kodzie blok %{} jest wywoływany dla każdej wartości w tablicy. Zmienna $_ lub $PSItem będzie zawierać bieżącą wartość.

 138
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-03 12:12:06

Myślę, że najprostszym sposobem myślenia o tej zmiennej jest parametr wejściowy w wyrażeniu lambda w C#. Tj. {[8] } jest podobny do x w x => Console.WriteLine(x) funkcji anonimowej w C#. Rozważmy następujące przykłady:

PowerShell:

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

Druki:

1
2
3

Lub

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

Druki:

2
3

I porównaj to ze składnią C# używając LINQ:

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

Druki:

1
2
3

Lub

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

Druki:

2
3
 34
Author: Sergey Teplyakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-15 19:53:22

Zgodnie z Ta strona jest odniesieniem do this, głównie w pętlach.

$ _ (Dolar) "Ten" żeton. Zazwyczaj odnosi się do element wewnątrz pętli foreach. Zadanie: Wydrukuj wszystkie elementy kolekcji. Rozwiązanie. ... / foreach { Write-Host $_ }

 26
Author: Ikke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-16 14:35:26

$_ jest aliasem automatycznej zmiennej $PSItem (wprowadzonej w PowerShell V3.0; Informacje o użytkowaniu znalezione tutaj), która reprezentuje bieżący element z potoku.

PowerShell (v6.0) dokumentacja online dla zmiennych automatycznych jest tutaj.

 2
Author: Xalorous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 21:51:01

$ _ jest zmienną, która iteruje nad każdym obiektem / elementem przekazanym z poprzedniego / (potoku).

 1
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 16:18:39

$_ jest zmienną utworzoną przez system Zwykle wewnątrz wyrażeń blokowych, do których odwołują się cmdlety, które są używane z takimi potworami jak Where-Object i ForEach-Object.

Ale może być stosowany również w innych typach wyrażeń, na przykład z Select-Object połączonymi z właściwościami wyrażenia. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}. W tym przypadku $_ reprezentuje element będący rurociągiem, ale może istnieć wiele wyrażeń.

Może być również odwoływany przez walidację niestandardowych parametrów, gdzie blok skryptu jest używany do walidacji wartość. W tym przypadku $_ przedstawia wartość parametru otrzymaną z wywołania.

Najbliższą analogią do c# i Javy jest wyrażenie lamda. Jeśli podzielisz powershell na podstawy, wszystko jest blokiem skryptu, w tym plikiem skryptu a, funkcjami i cmdletami. Możesz zdefiniować własne parametry, ale w niektórych przypadkach jeden jest tworzony przez system dla Ciebie, który reprezentuje element wejściowy do przetworzenia / oceny . W takich sytuacjach automatyczna zmienna jest $_.

 0
Author: Alex Sarafian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-05 19:33:14