Skriptovanie v shelli: zásada pri čítaní z premenných

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 cutom. 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.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *