Table of Contents

Záludné chování či chyby základních programů

bash

"Verbatim expansion"

Velmi užitečná je konstrukce $'…' v bashi, provádí jen interpretaci zpětného lomítka podle standardu ANSI a jinak ničeho jiného:

09:22 obo-desktop ~$ echo $'\x41'
A

sort

Nastavení locale ovlivňuje výsledek

sort je známý tím, že třídí různě podle toho, jak máte nastavené locale. Jestli třídění proběhne korektně česky v českém locale jsem nestudoval.

Takto sort přesvědčíte, aby třídil podle bytů (čísel znaků), nikoli podle nějaké interpretace, jak asi vypadá obrázek písmene toho čísla:

env LC_ALL=C sort < vstup > výstup

Nastavení je dobré i pro případy, kdy vaše řádky obsahují různé symboly. Ukázkový rozdíl:

08:56$ sort < clipin
ahoj
<ahoj
"ahoj
08:56$ env LC_ALL=C sort < clipin
"ahoj
<ahoj
ahoj

Kódování souboru může vést ke špatným výsledkům

Pokud máte na konzoli UTF-8 a soubor clipin v ISO-8859-2, může vás sort -u nemile překvapit: neodliší ě od š nebo č.

23:01 sol8 ~$ iconv -f latin2 -t utf8 < clipin
ě
š
ě
č
23:01 sol8 ~$sort -u < clipin | iconv -f latin2 -t utf8
ě
23:00 sol8 ~$env LC_ALL=C sort -u < clipin | iconv -f latin2 -t utf8
š
č
ě

iconv jsem ve všech případech přidal, abych na konzoli vypsal soubor v UTF-8, jak konzole čeká.

uniq

Stejně jako sort, i uniq podléhá locale.

Stejně jako sort, i uniq se divně chová k souborům v nějakém kódování. (Ano, rozumíte správně, opravdu říkám, že uniq se chová divně ke všem souborům ;-))