Question
différence entre $input et $_
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 4 mois #8010
par jojo
différence entre $input et $_ a été créé par jojo
Bonjour les gars, j'espère que vous allez bien 
j'ai une question d'ordre syntaxique, quel est la différence entre ces deux syntaxes:
[code:1]PS>1..10|ForEach {$input -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0
PS>1..10|ForEach {$_ -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0[/code:1]
la variable automatique $input et la variable $_ dans cette exempleont le même effet, pourquoi dans l'exemple ci-dessous la valeur générée n'est pas la même:
[code:1]PS> 1..10|ForEach {$_ * 2}
2
4
6
8
10
12
14
16
18
20
PS> 1..10|ForEach {$input * 2}
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
PS> 1..10|ForEach {$_ -match '1'}
True
False
False
False
False
False
False
False
False
True
PS> 1..10|ForEach {$input -match '1'}
1
10
[/code:1]
pour la fin quand me conseillez-vous d'utiliser $input et quand me conseillez-vous d'utiliser $_
merci les gars
j'ai une question d'ordre syntaxique, quel est la différence entre ces deux syntaxes:
[code:1]PS>1..10|ForEach {$input -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0
PS>1..10|ForEach {$_ -replace '1','#'}
#
2
3
4
5
6
7
8
9
#0[/code:1]
la variable automatique $input et la variable $_ dans cette exempleont le même effet, pourquoi dans l'exemple ci-dessous la valeur générée n'est pas la même:
[code:1]PS> 1..10|ForEach {$_ * 2}
2
4
6
8
10
12
14
16
18
20
PS> 1..10|ForEach {$input * 2}
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
PS> 1..10|ForEach {$_ -match '1'}
True
False
False
False
False
False
False
False
False
True
PS> 1..10|ForEach {$input -match '1'}
1
10
[/code:1]
pour la fin quand me conseillez-vous d'utiliser $input et quand me conseillez-vous d'utiliser $_
merci les gars
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 15 ans 4 mois #8012
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:différence entre $input et $_
Bonjour ce que je comprends de tes tests :
la variable $_ contient l'objet courant du pipeline
la variable $input contient l'objet entier à gauche du pipeline
Ayant cours , je ne peux pas donner pour l'intant plus d'explication quand aux résultats.
Bien Cordialement,
Richard Lazaro.
la variable $_ contient l'objet courant du pipeline
la variable $input contient l'objet entier à gauche du pipeline
Ayant cours , je ne peux pas donner pour l'intant plus d'explication quand aux résultats.
Bien Cordialement,
Richard Lazaro.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 4 mois #8013
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:différence entre $input et $_
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 15 ans 4 mois #8014
par Arthur
Réponse de Arthur sur le sujet Re:différence entre $input et $_
Juste pour ajouter que la variable $input est surtout utilisée ( Enfin surtout pour moi
) dans les fonctions prenant en compte des pipes :
[code:1] function Addition { $input | foreach { $total += $_ } ; $total }
1..4 | Addition
#10[/code:1]<br><br>Message édité par: bilbao, à: 8/11/10 15:16
[code:1] function Addition { $input | foreach { $total += $_ } ; $total }
1..4 | Addition
#10[/code:1]<br><br>Message édité par: bilbao, à: 8/11/10 15:16
Connexion ou Créer un compte pour participer à la conversation.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 4 mois #8030
par jojo
Réponse de jojo sur le sujet Re:différence entre $input et $_
merci les gars, vous êtes génial 
merci Laurent pour ton tutoriel, j'ai compris maintenant que la variable $input au contaraire de la variable $_ à son propre itérateur
merci @ tous
merci Laurent pour ton tutoriel, j'ai compris maintenant que la variable $input au contaraire de la variable $_ à son propre itérateur
merci @ tous
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 4 mois #8034
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:différence entre $input et $_
Un complément sur l'usage de $Input
[code:1]
################################################################################
#
# Nom : Remove-Object.ps1
#
# Objectif : Ne pas propager certains éléments d'une collection dans le pipeline :
#
# $Index : Borne inférieure ou supérieure des objets à filtrer
# Par défaut on ne transmet pas les n premiers éléments
#
# $LastObjects : On transmet les n derniers éléments uniquement
#
# Cette fonction se comporte à l'identique d'un bloc END.
# C'est à dire que l'on attend de recevoir toutes les données du segment de pipeline précédent
# avant de procéder au traitement.
#
# Exemple
# PS>1..10|Remove-Object 3
# 4,5,6,7,8,9,10
#
# PS>1..10|Remove-Object 3 -LastObjects
# 1,2,3,4,5,6,7
#
# Version : 1.2
# Auteur : Laurent Dardenne
# Date : le 10/12/2008
#
################################################################################
Function Remove-Object([int]$Index,[switch]$LastObjects)
{
#Cette fonction implémente par défaut uniquement le bloc End
if ($Index -lt 0)
{Throw \"L'index doit être positif.\"}
#L'usage d'un tableau intermédiaire autorise la notation d'intervalle sur $input
$T=@($input) #Cast d'input en un tableau
#L'index précisé peut être hors du tableaux courant
if ($Index -gt $T.GetUpperBound(0))
{$Index=$T.GetUpperBound(0)}
if ($LastObjects)
{ $T[0..($T.count - $Index-1)] }
else
{ $T[($Index)..$T.count] }
}
#exemple
1..10|Remove-Object 3
1..10|Remove-Object 3 -LastObjects
dir
dir|Remove-Object 3
dir|Remove-Object 3 -LastObjects
[/code:1]
On peut utiliser Select-Object mais ce cmdlet nécessite de connaître la taille de la collection.
De plus il n'est pas optimiser .
Ce qui fait que la fonction est plus rapide :
[code:1]
measure-command {1..10|Remove-Object 3}
measure-command {1..10|select -Last 7}
measure-command {1..10|Remove-Object 3 -LastObjects}
measure-command {1..10|select -first 7}
[/code:1]
Voir aussi le comportement de $Input dans un membre synthétique :
[code:1]
$a = \"foo\"
$a = add-member -in $a -memberType ScriptMethod -name Foo -value {
[Int] $Increment= $args[0]
$v3=$_
$v2=$input
$v=$input|%{$_}
write-host \"Increment=$Increment\"
write-host \"v (from `$input)= $v2\"
write-host \"v2(from `$input|%{`$_})= $v\"
write-host \"v3 (from `$_)= $v3\"
write-host (\"-\" * 40)
} -passthru
$a.Foo(753)
1..5|% {$a.Foo(5)}
[/code:1]
Ici le pipeline renseigne $Input ET $_ .
[code:1]
################################################################################
#
# Nom : Remove-Object.ps1
#
# Objectif : Ne pas propager certains éléments d'une collection dans le pipeline :
#
# $Index : Borne inférieure ou supérieure des objets à filtrer
# Par défaut on ne transmet pas les n premiers éléments
#
# $LastObjects : On transmet les n derniers éléments uniquement
#
# Cette fonction se comporte à l'identique d'un bloc END.
# C'est à dire que l'on attend de recevoir toutes les données du segment de pipeline précédent
# avant de procéder au traitement.
#
# Exemple
# PS>1..10|Remove-Object 3
# 4,5,6,7,8,9,10
#
# PS>1..10|Remove-Object 3 -LastObjects
# 1,2,3,4,5,6,7
#
# Version : 1.2
# Auteur : Laurent Dardenne
# Date : le 10/12/2008
#
################################################################################
Function Remove-Object([int]$Index,[switch]$LastObjects)
{
#Cette fonction implémente par défaut uniquement le bloc End
if ($Index -lt 0)
{Throw \"L'index doit être positif.\"}
#L'usage d'un tableau intermédiaire autorise la notation d'intervalle sur $input
$T=@($input) #Cast d'input en un tableau
#L'index précisé peut être hors du tableaux courant
if ($Index -gt $T.GetUpperBound(0))
{$Index=$T.GetUpperBound(0)}
if ($LastObjects)
{ $T[0..($T.count - $Index-1)] }
else
{ $T[($Index)..$T.count] }
}
#exemple
1..10|Remove-Object 3
1..10|Remove-Object 3 -LastObjects
dir
dir|Remove-Object 3
dir|Remove-Object 3 -LastObjects
[/code:1]
On peut utiliser Select-Object mais ce cmdlet nécessite de connaître la taille de la collection.
De plus il n'est pas optimiser .
Ce qui fait que la fonction est plus rapide :
[code:1]
measure-command {1..10|Remove-Object 3}
measure-command {1..10|select -Last 7}
measure-command {1..10|Remove-Object 3 -LastObjects}
measure-command {1..10|select -first 7}
[/code:1]
Voir aussi le comportement de $Input dans un membre synthétique :
[code:1]
$a = \"foo\"
$a = add-member -in $a -memberType ScriptMethod -name Foo -value {
[Int] $Increment= $args[0]
$v3=$_
$v2=$input
$v=$input|%{$_}
write-host \"Increment=$Increment\"
write-host \"v (from `$input)= $v2\"
write-host \"v2(from `$input|%{`$_})= $v\"
write-host \"v3 (from `$_)= $v3\"
write-host (\"-\" * 40)
} -passthru
$a.Foo(753)
1..5|% {$a.Foo(5)}
[/code:1]
Ici le pipeline renseigne $Input ET $_ .
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- différence entre $input et $_