221 votes

Qu'est-ce que signifie $_ en PowerShell ?

J'ai vu beaucoup de fois cela en PowerShell, mais qu'est-ce que cela fait exactement?

$_

165voto

JaredPar Points 333733

Ceci est la variable pour la valeur actuelle dans le pipeline, qui est appelée $PSItem dans Powershell 3 et plus récent.

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

ou

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

Par exemple dans le code ci-dessus, le bloc %{} est appelé pour chaque valeur dans le tableau. La variable $_ ou $PSItem contiendra la valeur actuelle.

38voto

Sergey Teplyakov Points 6556

Je pense que le moyen le plus simple de penser à cette variable est comme un paramètre d'entrée dans une expression lambda en C#. C'est-à-dire que $_ est similaire à x dans la fonction anonyme x => Console.WriteLine(x) en C#. Considérez les exemples suivants :

PowerShell :

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

Affiche :

1
2
3

ou

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

Affiche :

2
3

Et comparez ceci avec la syntaxe C# en utilisant LINQ :

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

Affiche :

1
2
3

ou

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

Affiche :

2
3

27voto

Ikke Points 31517

Selon ceci site Web, il s'agit d'une référence à ceci, principalement dans les boucles.

$_ (dollar underscore) jeton 'THIS'. Réfère généralement à l'élément à l'intérieur d'une boucle foreach. Tâche: Imprimer tous les éléments d'une collection. Solution. ... | foreach { Write-Host $_ }

9voto

Xalorous Points 552

$_ est un alias pour la variable automatique $PSItem (introduite dans PowerShell V3.0; Informations d'utilisation trouvées ici) qui représente l'élément actuel provenant du pipeline.

La documentation en ligne de PowerShell (v6.0) pour les variables automatiques se trouve ici.

3voto

Alex Sarafian Points 324

$_ est une variable créée par le système généralement à l'intérieur d'expressions de bloc qui sont référencées par des cmdlets utilisés avec des tuyaux comme Where-Object et ForEach-Object.

Mais elle peut également être utilisée dans d'autres types d'expressions, par exemple avec Select-Object combiné avec des propriétés d'expression. Get-ChildItem | Select-Object @{Name="Nom";Expression={$_.Nom}}. Dans ce cas, $_ représente l'élément qui est envoyé en tuyau mais plusieurs expressions peuvent exister.

Elle peut également être référencée par la validation de paramètres personnalisés, où un bloc de script est utilisé pour valider une valeur. Dans ce cas, $_ représente la valeur du paramètre telle que reçue de l'invocation.

L'analogie la plus proche avec c# et java est l'expression lambda. Si vous décomposez PowerShell aux bases, alors tout est un bloc de script y compris un fichier de script, les fonctions et les cmdlets. Vous pouvez définir vos propres paramètres mais dans certaines occasions, un est créé par le système pour vous qui représente l'élément d'entrée à traiter/évaluer. Dans ces situations, la variable automatique est $_.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X