J'ai souvent vu ce qui suit dans PowerShell, mais que fait-il exactement?
$_
Il s'agit de la variable correspondant à la valeur actuelle dans le pipeline, 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 du tableau. La variable $_
ou $PSItem
contiendra la valeur actuelle.
Je pense que la façon la plus simple de penser à cette variable, comme le paramètre d'entrée dans l'expression lambda en C # C'est à dire. $_
est similaire à x
dans x => Console.WriteLine(x)
fonction anonyme en C #. Considérez les exemples suivants:
PowerShell:
1,2,3 | ForEach-Object {Write-Host $_}
Impressions:
1
2
3
ou
1,2,3 | Where-Object {$_ -gt 1}
Impressions:
2
3
Et comparez ceci avec la syntaxe C # en utilisant LINQ:
var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));
Impressions:
1
2
3
ou
list.Where( _ => _ > 1)
.ToList()
.ForEach(s => Console.WriteLine(s));
Impressions:
2
3
D'après this website, il s'agit d'une référence à this
, principalement en boucles.
$ _ (trait de soulignement en dollars) "CE" jeton. Se réfère généralement à la article dans une boucle foreach. Tâche: Imprimer tous les articles d'une collection . Solution. ... | foreach {Write-Host $ _}
$ _ est un alias de la variable automatique $ PSItem (introduite dans PowerShell V3.0; Les informations d'utilisation trouvées ici ) représentent l'élément actuel du canal.
La documentation en ligne de PowerShell (v6.0) pour les variables automatiques est ici .
$ _ est une variable qui itère sur chaque objet/élément passé de la précédente | (tuyau).
$_
est une variable créée par le système, généralement dans des expressions de bloc référencées par des applets de commande utilisées avec un canal tel que Where-Object
et ForEach-Object
.
Mais il peut également être utilisé dans d'autres types d'expressions, par exemple avec Select-Object
combiné avec des propriétés d'expression. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
. Dans ce cas, le $_
représente l'élément en cours d'acheminement, mais plusieurs expressions peuvent exister.
Il peut également être référencé par la validation de paramètres personnalisés, où un bloc de script est utilisé pour valider une valeur. Dans ce cas, le $_
représente la valeur du paramètre telle que reçue de l'invocation.
L'analogie la plus proche de c # et de Java est l'expression lamda. Si vous interrompez powershell to basics, alors tout est un bloc de script, y compris un fichier de script a, des fonctions et des applets de commande. Vous pouvez définir vos propres paramètres, mais dans certains cas, le système en crée un qui représente l’élément en entrée à traiter/évaluer . Dans ces situations, la variable automatique est $_
.