Vyhodnocení příkazů

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Spravce (diskuse | příspěvky)
(Osamostatnění stránky.)

Aktuální verze z 12. 1. 2023, 00:34


Obsah

Vyhodnocování příkazového řádku v shellu

Pokud například zapíšeme v příkazovém řádku:

mv *.txt ~/$TARGET

Shell provede následující nahrazení:

  1. ~ nahradí za domovský adresář
  2. $TARGET nahradí za obsah proměnné
  3. *.txt nahradí za seznam všech souborů v adresáři s příponou .txt.

Pokud příkaz spustí uživatel student, obsahem proměnné TARGET je text backup a v aktuálním adresáři mají příponu .txt jen soubory a.txt a b.txt, spustí se příkaz:

mv a.txt b.txt /home/student/backup

Ve Windows metaznaky dostávají příkazy bez nahrazování. Proto lze na Windows psát:

ren *.jpg *.bkp.jpg

V Linuxu bychom toto museli řešit s využitím cyklu.

Pořadí nahrazování
  1. ~
  2. nahrazení proměnných
  3. nahrazení *, ?

Nahrazené hodnoty se dále nenahrazují

Jednou nahrazené hodnoty již dalším nahrazováním neprochází, i když obsahují speciální znaky

Příklady:

FILES="*.txt"
ls $FILES

→ vypíše: ls: nelze přistoupit k '*.txt'

A ze stejného důvodu:

touch '$POKUS'
echo *POK*

→ vypíše: $POKUS (Nedosadí se hodnota proměnné POKUS.)


A také:

TARGET="~/BACKUP"
cp data.txt $TARGET

→ vypíše chybu a nebude fungovat, protože se bude snažit zapisovat do složky ~/BACKUP (vlnovka a lomítko budou součástí názvu) Přitom ale:

TARGET=~/BACKUP
cp data.txt $TARGET

→ fungovat bude (pokud existuje složka BACKUP ve vaší domovské složce)

Vložení speciálních znaků do příkazů

  • student@computer:~$ touch \$USER → Vytvoří soubor s názvem $USER
  • student@computer:~$ touch a\ b → Vytvoří soubor s názvem a b (v názvu je mezera)
  • student@computer:~$ touch a\\b → Vytvoří soubor s názvem a\b
  • student@computer:~$ echo ~/$USER → /home/student/student
  • student@computer:~$ echo "~/$USER" → ~/student
  • student@computer:~$ echo '~/$USER' → ~/$USER

Obecně nedoporučujeme používat v názvech souborů speciální znaky!

Může se ale stát, že takový soubor vznikne například přenosem z jiného operačního systému, kde dané znaky nejsou speciálními znaky.

Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje