V shellovskom skriptovaní platí zdravá zásada: ak čítame obsah premennej, uzatvorme ju do úvodzoviek. Niekedy sa totiž môžu diať veci!
Jednoduchý príklad: skript, ktorý vypíše cestu k domovskému adresáru používateľa:
#!/bin/sh
LOGIN=$1
if [ -z "$LOGIN" ]
then
echo "Usage: $0 username"
exit
fi
cut -d":" -f6 < /etc/passwd | grep "$LOGIN"
Parameter -z
testuje, či je reťazec neprázdny. Opäť si pozorne všimnime uzavretie premennej do úvodzoviek (-z "$LOGIN"
).
Ak by sme to nespravili, stala by sa galiba. Ak by sme parameter z príkazového riadka vynechali, premenná 1
bude obsahovať prázdny reťazec (v zmysle špecifikácie: null string), ktorý sa priradí do premennej LOGIN
. Príkaz:
if [ -z $LOGIN ]
teda expanduje LOGIN
na
if [ -z ]
Následne sa pustí vnútro príkazu [
, ktoré… beda! zistí, že reťazec ]
(áno, reťazec s pravou hranatou zátvorkou) nemá nulovú dĺžku a radostne vykoná vetvu s cut
om. Spôsobí to samozrejme výpis všetkých domovských priečinkov, čo nie je to, čo chceme.
Ak premennú LOGIN
uzavrieme do úvodzoviek, expanzia vyústi v:
if [ -z "" ]
To je korektné a očakávané správanie.