Wat gebeurt er nu echt?

Goede vraag. Er worden door de shell bash een paar tekens onderschept. De asterix (*), geeft aan dit woord door alle bestanden die in deze specificatie passen te vervangen. Dus de opdracht cp data* ~/backup, zoals die hierboven, wordt gewijzigd in cp data-new data1 data2 data5 ~/backup voordat deze wordt uitgevoerd. Laat me dit illustreren door een nieuwe opdracht te introduceren, namelijk echo. echo is een uiterst simpele opdracht; het weerkaatst, of drukt enige parameters af. Dus:


/home/larry# echo Hallo!
Hallo!
/home/larry# echo Hoe gaat het met je?
Hoe gaat het met je?
/home/larry# cd report
/home/larry/report#  ls -F

1993-1          1994-1          data1           data5
1993-2          data-new        data2
/home/larry/report# echo 199*
1993-1 1993-2 1994-1
/home/larry/report# echo *4*
1994-1
/home/larry/report# echo *2*
1993-2 data2
/home/larry/report# 

Zoals je kunt zien, breidt de shell het jokerteken uit en geeft het alle bestanden door aan het programma dat je het vertelt het uit te voeren. Wat gebeurt er als er geen bestanden zijn die tegemoet komen aan de jokertekenspecificatie? Probeer eens echo /rc/fr*og en je zult zien dat bash de jokertekenspecificatie letterlijk doorgeeft aan het programma. Andere shells, zoals tcsh zullen in plaats van het letterlijk doorgeven van het jokerteken, antwoorden met "No match". Hier wordt dezelfde opdracht uitgevoerd onder tcsh:


mousehouse> echo /rc/fr*og
echo: No match.
mousehouse> 

Het laatste wat je nu misschien nog zou willen weten is hoe je data* zelf teruggekaatst krijgt in plaats van dat het de lijst met bestandsnamen retourneert? Onder zowel bash als tcsh plaats je de tekenreeks dan gewoon tussen aanhalingstekens:


/home/larry/report# echo "data*"
data*
/home/larry/report# 

OF


mousehouse> echo "data*"
data*
mousehouse> 

Het vraagteken

Behalve de asterix, interpreteert de shell ook een vraagteken als speciaal teken. Een vraagteken komt overeen met één, maar dan ook slechts één teken. ls /etc/?? bijvoorbeeld zal alle tweeletterige bestanden in de /etc directory weergeven.