PredchádzajúciHoreDomovNasledujúci

Špeciálne znaky a úvodzovky

Metaznaky

Niektoré znaky (tzv. metaznaky) majú v interpreteroch príkazov (napr. v bash-i) špeciálny význam. Medzi tieto znaky patria napríklad:

Escapovanie

V rôznych situáciách je potrebné metaznakom odobrať ich špeciálny význam. Napríklad ak chceme vytvoriť súbor alebo adresár, ktorého názov obsahuje medzeru:

Cvičenie Zmente aktuálny adresár:

$> cd ~/os/cv02/

Cvičenie Pokúste sa vytvoriť adresár s názvom test dir a overte či sa to podarilo:

$> mkdir test dir
$> ls -l
drwxrwxr-x 2 user user 4096 Jun 19 11:07 dir
drwxrwxr-x 2 user user 4096 Jun 19 11:07 test

V skutočnosti predchádzajúci príkaz vytvoril dva adresáre, prvý s názvom test a druhý s názvom dir. Stalo sa tak preto, lebo znak medzera slúži ako oddeľovač parametrov a príkaz mkdir vie vytvoriť viacero adresárov súčasne ak bolo zadaných viacero samostatných názvov na príkazovom riadku.

Ak chceme aby bol vytvorený jeden adresár s názvom test dir, musíme znaku medzera medzi test a dir odobrať význam oddeľovača. Jedným zo spôsobov ako to spraviť je použiť tzv. escapovanie, t.j. uviesť pred špeciálnym znakom znak \.

Cvičenie Vyskúšajte rozdiel medzi nasledujúcimi povelmi obsahujúcimi špeciálne znaky:

$> echo *
dir test
$> echo \*
*
$> echo $USER
user
$> echo \$USER
$USER
$> echo ;

$> echo \;
;
$> echo \
> bla
bla
$> echo \\
\

Cvičenie Teraz môžme opäť skúsiť vytvoriť adresár test dir a overiť či sa to podarilo:

$> mkdir test\ dir
$> ls -l
drwxrwxr-x 2 user user 4096 Jun 19 11:07 dir
drwxrwxr-x 2 user user 4096 Jun 19 11:07 test
drwxrwxr-x 2 user user 4096 Jun 19 11:18 test dir

Použitie úvodzoviek a apostrofov

Podobný efekt môžeme dosiahnuť použitím úvodzoviek. Páry úvodzoviek a apostrofov odoberajú špeciálny význam niektorým metaznakom vo výrazoch vo vnútri, je medzi nimi ale určitý rozdiel.

Cvičenie Vyskúšajte rozdiel medzi nasledujúcimi povelmi (sledujte najmä rozdiel medzi výrazmi ako '$USER' a "$USER"):

$> echo *
$> echo "*"
$> echo "$USER"
$> echo '$USER'
$> echo "$$"
$> echo '$$'
$> echo ;
$> echo ';'
[Dôležité] Dôležité

Apostrofy zabraňujú expanzií premenných a parametrov, úvodzovky expanzií nebránia.

Teraz môžme vyskúšať vymazať všetky tri vytvorené adresáre:

Cvičenie Zmažte adresáre test, dir a test dir a overte, či sa vykonanie operácie podarilo.

$> rmdir test dir "test dir"
$> ls -l

Opačné apostrofy

Medzi ďalšie špeciálne znaky patrí znak ` (opačný apostrof, backtick). Výraz uzavretý v dvojici opačných apostrofov sa interpreter najskôr pokúsi vykonať ako príkaz a pôvodný výraz uzavretý medzi opačnými apostrofmi sa nahradí textovým výstupom tohto príkazu. Napriklad:

$> echo "Pracujete v adresari `pwd`, aktuálny čas je `date +%T`."
Pracujete v adresari /home/user/os/cv02, aktuálny čas je 13:14:04.

Pre výrazy v opačných apostrofoch existuje aj alternatívna syntax:

$(vyraz)
[Tip] Tip

Na rozdiel od dvojice opačných apostrofov, je možné výrazy $(...) vnárať.

Cvičenie Vyskúšajte si použitie vnorených výrazov $(...).

$> echo "V nadradenom adresari su nasledujuce polozky: $(ls $(pwd)/..)."
V nadradenom adresari su nasledujuce polozky: cv01 cv02 cv03 ... cv11 cv12.
[Tip] Tip

Obsah súboru bez akýchkoľvek transformácií je možné získať pomocou výrazu $(cat cesta). Efektívnešie je však na tento účel použiť výraz $(<cesta):

Cvičenie Vypíšte verziu jadra operačného systému zo súboru /proc/version.

$> echo "Verzia systemu: '$(</proc/version)'"
Verzia systemu: 'Linux version 2.6.32-5-amd64 ... '

PredchádzajúciHoreDomovNasledujúci