tutorial - ¿Qué significa $_en PowerShell?
powershell tutorial (6)
He visto lo siguiente en PowerShell, pero ¿qué hace exactamente?
$_
$ _ es un alias para la variable automática $ PSItem (introducida en PowerShell V3.0; información de uso encontrada aquí ) que representa el elemento actual de la tubería.
La documentación en línea de PowerShell (v6.0) para variables automáticas está here .
$ _ es una variable que itera sobre cada objeto / elemento pasado de la anterior | (tubo).
Creo que la forma más fácil de pensar acerca de esta variable es el parámetro de entrada en la expresión lambda en C #. Es decir, $_
es similar a x
en x => Console.WriteLine(x)
función anónima en C #. Considere los siguientes ejemplos:
Potencia Shell:
1,2,3 | ForEach-Object {Write-Host $_}
Huellas dactilares:
1
2
3
o
1,2,3 | Where-Object {$_ -gt 1}
Huellas dactilares:
2
3
Y compare esto con la sintaxis de C # usando LINQ:
var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));
Huellas dactilares:
1
2
3
o
list.Where( _ => _ > 1)
.ToList()
.ForEach(s => Console.WriteLine(s));
Huellas dactilares:
2
3
Esta es la variable para el valor actual en la línea de tubería, que se llama $PSItem
en Powershell 3 y más reciente.
1,2,3 | %{ write-host $_ }
o
1,2,3 | %{ write-host $PSItem }
Por ejemplo, en el código anterior, se llama al bloque %{}
para cada valor de la matriz. La variable $_
o $PSItem
contendrá el valor actual.
Según this sitio web, es una referencia a this
, principalmente en loops.
$ _ (subrayado en dólares) ''ESTE'' token. Normalmente se refiere al elemento dentro de un bucle foreach. Tarea: Imprimir todos los elementos en una colección. Solución. ... | foreach {Write-Host $ _}
$_
es una variable creada por el sistema generalmente dentro de las expresiones de bloque a las que hacen referencia los cmdlets que se usan con tuberías como Where-Object
y ForEach-Object
.
Pero también se puede usar en otros tipos de expresiones, por ejemplo, con Select-Object
combinado con propiedades de expresión. Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
. En este caso, $_
representa el elemento que se está canalizando, pero pueden existir múltiples expresiones.
También se puede hacer referencia a la validación de parámetros personalizados, donde se utiliza un bloque de script para validar un valor. En este caso, $_
representa el valor del parámetro como se recibió de la invocación.
La analogía más cercana a c # y java es la expresión lamda. Si desglosa PowerShell a lo básico, entonces todo es un bloque de script que incluye un archivo de script a, funciones y cmdlets. Puede definir sus propios parámetros, pero en algunas ocasiones el sistema crea uno que representa el elemento de entrada para procesar / evaluar . En esas situaciones la variable automática es $_
.