PowerShell et l'opérateur contient
Considérons le fragment de code suivant:
"12-18" -Contains "-"
Vous pensez que cela donne true
, mais il ne le fait pas. Cela permettra d'évaluer à false
à la place. Je ne suis pas sûr de savoir pourquoi cela arrive, mais ce n'.
Pour éviter cela, vous pouvez utiliser ceci à la place:
"12-18".Contains("-")
Maintenant l'expression sera évaluée à true.
Pourquoi le premier extrait de code se comporter comme ça? est-il quelque chose de spécial à propos de -
qui ne jouent pas bien avec -Contains
? Le la documentation ne mentionne rien à ce sujet.
Vous devez vous connecter pour publier un commentaire.
La
-Contains
opérateur ne fait pas de sous-chaîne comparaisons et le match doit être sur une chaîne complète et est utilisé pour rechercher des collections.De la documentation liée à:
Dans l'exemple que vous avez fourni vous travaillez avec une collection contenant une chaîne de caractères de l'élément.
Si vous lisez la documentation de vous relier à vous en verrez un exemple qui illustre ce comportement:
Exemples:
Je pense que ce que vous voulez, c'est le
Match
opérateur:Qui renvoie
True
."12-18".Contains("-")
Contains
powershell de l'opérateur et de la.Contains()
.NETString
méthode.-Contains
est en fait un opérateur de collecte. Il est vrai, si la collection contient l'objet. Il n'est pas limité à cordes.match
et-imatch
sont l'expression régulière de la chaîne de rapprochement, et de définir des variables automatiques pour une utilisation avec des captures.-like
,-ilike
sont de type SQL de rapprochement.Vous pouvez utiliser
like
:Ou
split
pourcontains
:like
est le meilleur, ou au moins la plus facile.match
est utilisé pour les regex comparaisons.Référence: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6