Dzisiaj zajmiemy się “drukowaniem”, czyli wyświetlaniem wyników na ekran i nie tylko.

Zapraszam serdecznie.

Dzień dobry… Dzień dobry… Dzień dobry - odpowiedziało echo.

Mały Książe - Antoine de Saint-Exupéry

Najczęściej używanym programem do drukowania na ekran jest program echo

Jest to prosty program. ale za to bardzo przydatny, wręcz nieoceniony.

Cały opis programu wygląda następująco:

Echo the STRING(s) to standard output.

       -n     do not output the trailing newline

       -e     enable interpretation of backslash escapes

       -E     disable interpretation of backslash escapes (default)

       --help display this help and exit

       --version
              output version information and exit

       If -e is in effect, the following sequences are recognized:

       \\     backslash

       \a     alert (BEL)

       \b     backspace

       \c     produce no further output

       \e     escape

       \f     form feed

       \n     new line

       \r     carriage return

       \t     horizontal tab

       \v     vertical tab

       \ONNN  byte with octal value NNN (1 to 3 digits)

       \xHH   byte with hexadecimal value HH (1 to 2 digits)

W przykładnie ósemkowym powinno być 0 zamiast O (problemy techniczne)

Przejdźmy kolejno przez kilka przykładów.

! w przypadku korzystania z WSL niektóre działania jak np. \f mogą nie działać w domyślnym terminalu !

\f - przejście do kolejnej linii e1

\r - tzw powrót karetki (nazwa pochodzi z maszyn do pisania). Wraca na początek linii e2

\f\r V \n - przejście do nowej lini oraz na początek wiersza e3 e4

\b - usuwa ostatni znak e5

\c - zatrzymuje drukowanie w tym punkcie (włącznie z zakończeniem linii) e6

\t - szeroki odstęp horyzontalny e7

\v - odstęp wertykalny e8

\x,\O - (powinno być zero) - drukowanie znaków przy użyciu kodów ASCII e9

Jak widzimy, mamy kilka propozycji użycia programu echo, które mogą pomóc np. przy tworzeniu interfejsów.

echo ma jeszcze jedną ciekawą funkcję, otóż potrafi wyświetlić pliki zgodne ze wzorcem np.: Załóżmy, że mamy 677 plików, zbudowanie z wykorzystaniem zakresu [a-z][A-Z].txt . Chcemy z tego zestawu wyciągnąć pliki, które zaczynają się od e.

Mamy kilka możliwości, by to uzyskać. Pokażę tylko 3 przykłady, resztę możecie przetestować sami, albo poczekać na post na temat globbingu. :)

e* - pierwsza litera ‘e’ i dowolne znaki dalej eg1

e[A-Z].??? - pierwsza litera e, następnie litera z zakresu (ASCII) A-Z, kropka i 3 znaki. eg2

e?.txt - litera e, dowolny znak i zakończenie .txt eg3

echo w takiej roli potrafi być wredne, ponieważ w przypadku nieznalezienia plików o podanym wzorcu wydrukuje nam ten wzorzec, bez informacji o błędzie.

Na koniec omawiania komendy echo dodam, że wzorce mogą być zapisane w zmiennych i potem użyte w poleceniu, z wykorzystaniem rozwiązywania wzorców (glob expansion).

ec1

Zwykle takie działania są wynikiem błędu lub niewiedzy, tutaj zaś wykorzystujemy to świadomie.

[…] Harmonia i ład, czyli przejrzysta, przemyślana struktura

O typografii i jej nauczaniu-Miesięcznik Znak (07/08.2018)

printf tym będziemy się zajmować w tej części, czyli drukowaniem sformatowanym. Jest to program, którego funkcją, tak samo, jak echo, jest drukowanie na ekranie z tą różnicą, że w przypadku podania złego typu niż zdefiniowany we wzorcu otrzymamy informację o błędzie oraz zostanie zwrócony kod błędu 1.

pr1

Opis samego programu wygląda następująco.


       Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:

       --help display this help and exit

       --version
              output version information and exit

       FORMAT controls the output as in C printf.  Interpreted sequences are:

       \\"     double quote

       \ \     backslash

       \a     alert (BEL)

       \b     backspace

       \c     produce no further output

       \e     escape

       \f     form feed

       \n     new line

       \r     carriage return

       \t     horizontal tab

       \v     vertical tab

       \NNN   byte with octal value NNN (1 to 3 digits)

       \xHH   byte with hexadecimal value HH (1 to 2 digits)

       \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)

       \UHHHHHHHH
              Unicode character with hex value HHHHHHHH (8 digits)

       %%     a single %

       %b     ARGUMENT as a string with '\ ' escapes interpreted, except that octal escapes are of the form \0 or \0NNN

       %q     ARGUMENT is printed in a format that can be reused as shell input, escaping non-printable characters with the proposed POSIX $'' syntax.

       and all C format specifications ending with one of diouxXfeEgGcs, with ARGUMENTs converted to proper type first.  Variable widths are handled.

Jak widzimy w opisie, większość operacji się pokrywa, z tą różnicą, że printf ma inną notację dla kodów ósemkowych, potrafi drukować z UNICODE oraz formatować komendy by nie były interpretowane, przydatne szczególnie wtedy, gdy budujemy dynamicznie komendę i chcemy, by uruchomiła się ona, dopiero gdy wszystkie elementy się znajdą np. w zmiennej.

Po więcej informacji na temat możliwości printf zapraszam pod 3 stronę manuala => man 3 printf. Jest tego sporo i zachodzi to trochę na ziemie języka C, dlatego też tutaj się zatrzymam i zostawię to do własnego przestudiowania.

W następnym poście z serii przejdziemy już do rozsławionego przez chyba wszystkie języki programowania programu “Hello World” oraz opowiemy sobie trochę o środowisku uruchomieniowym. Serdecznie zapraszam :)