PowerShell en de operator -contains

Beschouw het volgende fragment:

"12-18" -Contains "-"

Je zou denken dat dit resulteert in True, maar dat is niet zo. Dit evalueert in plaats daarvan tot false. Ik weet niet zeker waarom dit gebeurt, maar het is wel zo.

Om dit te voorkomen, kun je dit gebruiken:

"12-18".Contains("-")

Nu wordt de uitdrukking geëvalueerd tot waar.

Waarom gedraagt het eerste codefragment zich zo? Is er iets speciaals aan -dat niet goed samengaat met -Contains? De documentatievermeldt er niets over.


Antwoord 1, autoriteit 100%

De operator -Containsdoet geen vergelijkingen van subtekenreeksen en de overeenkomst moet een volledige tekenreeks zijn en wordt gebruikt om collecties te doorzoeken.

Uit de documentatie waarnaar u heeft gelinkt:

-Bevat
Beschrijving: Insluitingsoperator. Geeft aan of een verzameling referentiewaarden een enkele testwaarde bevat.

In het door u gegeven voorbeeld werkt u met een verzameling die slechts één stringitem bevat.

Als u de documentatie leest waarnaar u linkt, ziet u een voorbeeld dat dit gedrag demonstreert:

Voorbeelden:

PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

Ik denk dat je de -matchoperator:

"12-18" -Match "-"

Wat Trueretourneert.

Belangrijk:Zoals aangegeven in de opmerkingen en in de gekoppelde documentatie, moet worden opgemerkt dat de operator -matchreguliere expressiesom tekstovereenkomst uit te voeren.


Antwoord 2, autoriteit 18%

-Containsis eigenlijk een verzamelingsoperator. Het is waar als de collectie het object bevat. Het is niet beperkt tot strings.

-matchen -imatchzijn tekenreeksen voor reguliere expressies en stellen automatische variabelen in voor gebruik bij opnames.

-like, -ilikezijn SQL-achtige matchers.


Antwoord 3, autoriteit 10%

Je kunt likegebruiken:

"12-18" -like "*-*"

Of splitvoor contains:

"12-18" -split "" -contains "-"

Antwoord 4

  • likeis het beste, of in ieder geval het gemakkelijkst.
  • matchWORDT GEBRUIKT VOOR RGEX VERGELIJKINGEN.

Referentie: over vergelijking Operators

Other episodes