Vyhodnocení příkazů
Obsah |
Vyhodnocování příkazového řádku v shellu
- Proměnné a další speciální znaky v Linuxu nahrazuje shell. Příkazy tedy tyto znaky vůbec nedostanou.
Pokud například zapíšeme v příkazovém řádku:
mv *.txt ~/$TARGET
Shell provede následující nahrazení:
-
~nahradí za domovský adresář -
$TARGETnahradí za obsah proměnné -
*.txtnahradí 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í
- ~
- nahrazení proměnných
- 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ů
- Pokud chceme do textu vložit speciální znaky, můžeme použít zpětné lomítko, uvozovky nebo apostrofy (
\,"nebo'). - Zpětné lomítko
\: ruší speciální význam dalšího znaku. - Uvozovky
": blokují význam speciálních znaků, ale doplňují se hodnoty proměnných. - Apostrofy
': blokují význam všech speciálních znaků včetně$.
-
student@computer:~$ touch \$USER→ Vytvoří soubor s názvem$USER -
student@computer:~$ touch a\ b→ Vytvoří soubor s názvema b(v názvu je mezera) -
student@computer:~$ touch a\\b→ Vytvoří soubor s názvema\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.