Jednym z bardziej denerwujących rzeczy w bash-u jest brak odpowiedniego debugowania.
Na przykład zapomnieliśmy dodać gdzieś cudzysłowia.
./plik --help
+ ./plik --help
./plik: linia 464: nieoczekiwany EOF podczas poszukiwania pasującego `"'
./plik: linia 476: błąd składni: nieoczekiwany koniec pliku
I nie możemy znaleść gdzie …
I co teraz ?
Możemy się wspomóc tym
http://wiki.bash-hackers.org/scripting/debuggingtips
lub tym
http://linuxcommand.org/wss0100.php
ale to nie wiele pomoże.
Przy założeniu że w każdej linii liczba cudzysłowi powinna być parzysta to można sobie napisać komende która
Przykład:
cat plik | sed 's/[^"]//g' | cat -n | grep "\""
I otrzymamy przykładowo coś takiego
227 ""
234 ""
237 ""
245 ""
246 ""
258 ""
263 ""
268 ""
273 "
290 ""
293 """"
295 ""
299 ""
I dzięki temu prawie odrazu widzimy gdzie brakuje cudzysłowia.
Albo jeszcze dokładniej, choć może nie zawsze szybciej
cat plik | sed 's/[^"]//g' | awk '{ print length }' | cat -n | grep "[13579]$"
273 1
Czyli komenda nam zwróciła numer linii
oraz nieparzystą liczbę wystąpień cudzysłowia.
Dzięki temu wiemy że w linii 273 znajduje się tylko 1 cudzysłów.