Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Expanze vlnovky

Vlnovka na začátku slova se expanduje na cestu k domovskému adresáři.

> echo ~
/home/petr
> echo ~/skripty
/home/petr/skripty

Přesněji se ~ expanduje na hodnotu proměnné HOME. Napíšeme-li za vlnovku jméno uživatele, expanduje se na jeho domovský adresář podle /etc/passwd.

> echo ~root
/root
> echo ~neexistujici
~neexistujici

Poslední řádek ukazuje obvyklé chování: pokud se expanze nepodaří, zůstane výraz nezměněn. Stejně se chová i expanze jmen souborů.

Dvě další formy odkazují na aktuální a předchozí pracovní adresář (proměnné PWD a OLDPWD):

> cd /var/log
> cd /tmp
> echo ~+
/tmp
> echo ~-
/var/log

Kdy se vlnovka expanduje

Expanze vlnovky proběhne pouze na začátku slova. Uprostřed se neexpanduje.

> echo /home/~
/home/~

Výjimkou jsou přiřazení do proměnné: vlnovka se expanduje i po znaku = a po každé dvojtečce. Právě díky tomu funguje obvyklé rozšíření PATH.

> PATH=~/bin:${PATH}
> echo ${PATH}
/home/petr/bin:/sbin:/bin:[...]

Protože je expanze vlnovky až druhá v pořadí a proběhne před expanzí proměnných, nepomůže nám vlnovka uvnitř hodnoty proměnné.

> DIR='~/skripty'
> echo ${DIR}
~/skripty
> ls ${DIR}
ls: cannot access '~/skripty': No such file or directory

Vlnovku je proto nutné expandovat při přiřazení, nikoliv při použití — tedy DIR=~/skripty bez apostrofů, nebo rovnou DIR=${HOME}/skripty. Druhá varianta je ve skriptech spolehlivější.

Uvozovky i apostrofy expanzi vlnovky potlačí:

> echo "~"
~

To je další důvod, proč ve skriptech dávat přednost ${HOME}: ten se expanduje i v uvozovkách, a uvozovky kolem cest chceme mít z důvodů popsaných v kapitole Dělení slov a IFS.