Za posledních několik měsíců jsem ztrávil už alespoň šest týdnů full-time práce na různých PowerShell programech. A musím říct, že už mě ten "jazyk" pěkne štve. Chová se to v mnoha případech divně. Myslím, že by víc prospělo, kdyby se nesnažili vymýšlet různé speciality a dali tomu nějakou precizní syntaxi a tím preciznější chování.
Dneska zase.
Případ -split operátoru
Rozdělování řetězců se dá udělat buď tak, že zavoláte jejich metodu .Split(). Funguje v pohodě.
Ale když v PowerShellu existuje takový pěkný operátor -split, tak jsem chtěl používat ten. A fungovalo to celou dobu bez chyby. Až do okamžiku, kdy jsem chtěl rozsekávat podle znaku $ (dolar).
A božínku, má to takovou zabudovanou "vlastnost", aby se skriptaři nenudili. Neumí to na první pohled rozsekávat pomocí oddělovače $ (dolar). A ještě se to chová chaoticky podle typu vstupního řetězce. Zkuste si tohle:
"text bez dolaru" -split '$'
'text bez dolaru' -split '$'
'text bez dolaru' -split '`$'
'text s $ dolarem' -split '$'
'text s $ dolarem' -split '`$'
Jediný případ, při kterém to fungovalo alespoň trošku korektně, je případ číslo tři. Ve všech ostatních se to chová jako idiot. Bóže.
Ve skutečnost je správně použít zpětné lomítko (backslash):
'text s $ dolarem' -split '\$'
Proč? On totiž -split operátor pracuje ve výchozím stavu s regulárními výrazy (RegExMatching). To je totiž zřejmě opravdu intuitivní. Každý skriptař to na první pohled ví. A pokud to ten naivka třeba neví, tak si to může vypsat v nápovědě - je to na konci té šesté stránky popisku:
get-help about_split
Takže mě to zase stálo cca dvě hodiny práce, přijít na to, proč mě nefunguje jedna úplně "intuitivní" funkce. Hlavně, že to skriptování má šetřit práci.