Az összehasonlítás műveletét végző összehasonlító operátorok jelzésére a PowerShell alkotói nem a hagyományos jeleket (=, <, >, <>, !=, stb.) választották, hanem külön jelölést vezettek be, rögtön két különböző szériát a kis-nagybetű érzéketlen és érzékeny változatra:
Operátor |
Leírás |
|
Kis-nagybetű érzékeny operátor |
Leírás |
-eq
|
egyenlő |
|
-ceq
|
egyenlő |
-ne
|
nem egyenlő |
|
-cne
|
nem egyenlő |
-gt
|
nagyobb |
|
-cgt
|
nagyobb |
-ge
|
nagyobb egyenlő |
|
-cge
|
nagyobb egyenlő |
-lt
|
kisebb |
|
-clt
|
kisebb |
-le
|
kisebb egyenlő |
|
-cle
|
kisebb egyenlő |
Megjegyzés
„Érzéketlen” változatként használhatjuk az operátorok „i” betűs megfelelőit is: -ieq, ‑ine, -igt, stb., de ezek az alap változattal teljesen ekvivalensen működnek.
Értelemszerűen az „érzékeny” változatot elsődlegesen szövegek összehasonlításakor használjuk, de a számoknál se ad hibát alkalmazásuk. Nézzünk akkor néhány példát mindezek alkalmazására:
[79] PS I:\>1 -ceq 1
True
[80] PS I:\>1 -eq 2
False
[81] PS I:\>1 -eq 1
True
[82] PS I:\>1 -ceq 1
True
[83] PS I:\>"ablak" -eq "ABLAK"
True
[84] PS I:\>"ablak" -ceq "ABLAK"
False
[85] PS I:\>5 -gt 2
True
Sokat azt hiszem nem is kell magyarázni.
Talán azt érdemes megnézni, hogy a szövegeket hogyan tudom „nagyság” szempontjából összehasonlítani:
[86] PS I:\>"ablak" -gt "ajtó"
False
[87] PS I:\>"baba" -gt "ablak"
True
[88] PS I:\>"ablak" -lt "állat"
True
[89] PS I:\>"asztal" -lt "állat"
False
[90] PS I:\>"á" -lt "a"
False
[91] PS I:\>"ab" -cgt "Ab"
False
Látszik, hogy itt a területi beállításoknak megfelelő szótár-sorrend alapján dől el, hogy melyik sztring nagyobb a másiknál.
Vigyázat! A PowerShell összehasonlítás során is végez automatikus típuskonverziót:
[1] PS I:\>"1234" -eq 1234
True
[2] PS I:\>1234 -eq "1234"
True
Persze nem mindenkor tud okos lenni, ha nagyon akarjuk, akkor átverhetjük:
[3] PS I:\>"0123" -eq 123
False
Ugye itt a 0-val kezdődő, idézőjelek közé tett szám esetén azt tartja valószínűbbnek, hogy ez szöveg, és akkor a jobb oldalon levő részt is szöveggé konvertálja magában, márpedig a „0123” nem egyenlő „123”-mal.
Nézzük meg, hogy vajon tömbök esetében hogyan működnek ezek az összehasonlító operátorok?
[10] PS I:\>1,2,3,4,1,2,3,1,2 -eq 1
1
1
1
[11] PS I:\>1,2,3,4,1,2,3,1,2 -eq 2
2
2
2
[12] PS I:\>1,2,3,4,1,2,3,1,2 -lt 3
1
2
1
2
1
[13] PS I:\>1,2,3,4,1,2,3,1,2 -eq 4
4
[14] PS I:\>1,2,3,4,1,2,3,1,2 -eq 5
Hoppá! Az első, amit láthatunk tömbök esetében, hogy nem True vagy False értéket kapunk, hanem azokat az elemeket, amelyekre igaz az adott összehasonlító művelet. Sőt! Ahogy a [14]-es promptban is látható, ha nincs egyezés, akkor sem kapunk False-t, hanem „semmi” a válasz.
Ha a jobb oldalon van tömb, akkor nem igazán kapunk egyenlőséget semmilyen esetben sem:
[19] PS I:\>(1,2),3 -eq 1,2
[20] PS I:\>1,2 -eq 1,2
[21] PS I:\>1 -eq 1,2
False