Před nějakou dobou jsem psal projekt ve kterém jsem používal programovací jazyk Perl. I když na něj existuje spousta vtipů, tento jazyk se mi celkem líbí. Obzvlášť práce s regulérními výrazy. Dostal jsem se ale do stádia, kdy jsem již nemohl pokračovat dále a práce s Perlem se mi stala obtížná, ne-li nemožná. Šlo o to, že jsem z Perlu potřeboval spouštět Basch-ové příkazy a nemohl jsem se vypořádat s kombinací uvozovek (`'“) a lomítek a jiných speciálních znaků. Byla zde ještě možnost doinstalovat knihovnu speciálně určenou pro tyto věci, ale chtěl jsem, aby to fungovalo pokud možno na všech strojích.
S Peťošovou pomocí (nikdy předtím jsem v Bash-i nic tak složitého nepsal) jsem celý projekt přepsal do Bash-e. Spousta věcí byla rázem snadná a průhledná. Ale spousta věcí byla pro men nepochopitelná, neprůhledná a složitá.
Největší problém jsem měl s tímto:
neexistuje komplexní manuál
Veškeré věci je nutno řešit pomocí man a když neznám správnou fci, tak Google.
nezjistil jsem, jak jednoduše pracovat s regulárními výrazy
V Perlu je to velice jednoduché a pohodlné. Tady je na to několik fcí a ani jedna mi nevyhovovala. Buď nedělala co jsem potřeboval, nebo to bylo přespříliš složité, abych se s tím zabýval. Nakonec jsem to vyřešil pomocí vnořeného Bash-e grepu a awk. Sice se mi to moc nelíbí, ale stále elegantnější, že regulár v Bash-i.
neumí pracovat s float čísly
Toto je největší kámen úrazu a byl jsem nucen tento nedostatek obcházet. Jinak bych zanesl velkou chybu a to bylo nepřípustné.
Když už Bash nějakým způsobem ukecáte aby bral desetinná čísla, tak nedokáže pobrat desetinné číslo s čárkou
3,14 != 3.14
. Celkem srozumitelné, ale v dnešní době je desetinná čárka běžná věc a výstupy z některých lokalizovaných nástrojů vrací čárku.
nepochopitelně lpí na používání a nepoužívání mezer
ŠPATNĚ:
promenna = 3
SPÁRVNĚ:
promenna=3
V jiných případech zase mezery vyžaduje. Při psaní asi jedna z nejproklínanějších vlastností.
při práci s proměnnými je potřeba používat metráky složených závorek, zavináčů a podobně
A nejen proměnných. Cykly o podobné základní fce mají taky celkem obskurní zápis (a zase ty mezery). Při deklaraci proměnné se zapisuje jen název, když s ní ale následně pracuji, tak musím použít $, nebo dokonce ${}. Chcete vědět mocnost pole? Není nic jednoduššího, než vypsat všechny speciální znaky co máte na klávesnici:
array_size=${#array[@]}