BnSOffTopic

ogólnie staram się szanować nasz piękny język i tępić ‘kontenty’ czy ‘autentykację’ [choć pewnie lada moment zostaną zapisane jako oficjalnie poprawne]. niemniej tłumaczenia niektórych fraz brzmią … zabiera trochę czasu, żeby się domyślić /: to na tyle jeśli w kwestii filozofii porannej, czas na gimnastykę z innego języka.

PS case sensivity

PS jest miły i przyjemny. stara się użytkownika we wszystkim wyręczyć, pomóc mu, wybaczyć błędy. czasem aż do przesady. ale jak każda istota, ma swoje odchyły, aberracje. tak też jest w przypadq traktowania wielkości znaków – ogólnie wszystko, dla ułatwienia, jest z automatu niewrażliwe na wielkości znaków. czyli mówiąc potocznie, jest baj difolt kejs-insensitive. są jednak wyjątki [bez których reguła nie mogłaby być pełna]:

  1. najbardziej zdradliwe, bo też i często używane, to ‘-unique’. z jednej strony logiczne, że unikalne ma być unikalne… z drugiej, skoro PS jest nieczuły na stan [prawda,  że też ładne tłumaczenie?], to skąd nagle taka zmiana…
C:\...ive\_ScriptZ :))o- $PS='nExoR','nexor','Nexor'
C:\...ive\_ScriptZ :))o- $PS|select -Unique

nExoR
nexor
Nexor

jak widać, każdy =))o- jest unikalny. rozsądnie. tak samo zresztą zachowuje się polecenie ‘get-unique’, a mogłoby się wyróżniać choćby dodatkowym parametrem ‘-CI’. ale się nie wyróżnia.

na każdego jest oczywiście metoda, tzw. walec. takim walcem w PS jest sortowanie, które również posiada parametr ‘-unique’, ale ten unique jest bardziej unique niż inne, bo jest właśnie nieczuły na wielkość:

C:\...ive\_ScriptZ :))o- $PS|sort -Unique

Nexor

[to nie jest prawidłowy =))o- ]

  1. drugim przykładem, zapewne bardziej [nomen omen] unikalnym, są wyrażenia regularne. oczywiście i tutaj są dwie wariacje – CI i CS, więc trzeba uważać. jeśli używa się zwykłych reguł ‘match’ lub ‘replace’, zachowuje się standardowo [czyli nie zwraca uwagi na wielkość znaków]:
C:\...ive\_ScriptZ :))o- $PS='nExoR jest Niewrażliwy Na Walizki'
C:\...ive\_ScriptZ :))o- $PS -match 'nexor'

True

jeśli jednak zdefiniuje się wyrrega [tak pewnie nazywał by się w polskiej wersji Logo. tłumaczone języki to  sqcha] … regexa, to zachowuje się inaczej [czyli CS]:

C:\...ive\_ScriptZ :))o- $PS='nExoR jest Niewrażliwy Na Walizki'
C:\...ive\_ScriptZ :))o- [regex]$rxeN="nexor"
C:\...ive\_ScriptZ :))o- $PS -match $rxeN

False

zmusić regexa do niewrażliwości można na dwa sposoby – albo definiując dodatkową opcję podczas deklaracji, lub modyfiqjąc samą definicję wyrażenia. pierwsza wersja może przestraszyć swoją monstrualnością, ale jak się w kodzie definiuje wiele regexów to warto raz zdefiniować i potem używać:

C:\...ive\_ScriptZ :))o- $PS='wyczUleniE na poKrowce to nie nExoR'
C:\...ive\_ScriptZ :))o- $rxOptCI = ([System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.Regular
Expressions.RegexOptions]::Compiled)
C:\...ive\_ScriptZ :))o- $rxeN=New-Object System.Text.RegularExpressions.Regex("nexor",$rxOptCI)
C:\...ive\_ScriptZ :))o- $PS -match $rxeN

True

opcje są wartością binarną, której każdy bit ma inne znaczenie. stąd binarny OR modyfiqjący jej wartość. jeśli wyrażeń regularnych w kodzie jest niewiele, bardziej opłaca się CI ustawić w jego definicji:

C:\...ive\_ScriptZ :))o- $PS='deLikAtny ProCeS nExoRa'
C:\...ive\_ScriptZ :))o- [regex]$rxeN="(?i)nexor"
C:\...ive\_ScriptZ :))o- $PS -match $rxeN

True

PostScriptum

znajomość sztuczek i tricków języka jest bardzo przydatna. można zaoszczędzić wiele linii kodu, a czasem bardzo wiele czasu, zmarnowanego na wyważanie otwartych okien. polecam również zajrzeć na powershellpl.net, ponieważ Bartek się w końcu uaktywnił.

eN.

 

 

Spread the love

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.