Aliassen en shell-functies

Als je vaak eenzelfde opdracht gebruikt, wordt je er wellicht moe van het in te tikken. bash laat je kortere aliassen voor je opdrachten schrijven. Je kunt ook shell-functies schrijven, wat aangepaste opdrachten samengesteld uit verscheidene andere opdrachten zijn.

Stel dat je altijd de --almost-all en --color=auto opties met ls gebruikt. Je raakt al gauw moe van het typen van ls --almost-all --color=auto. Dus maak je een alias:
alias myls='ls --almost-all --color=auto'   

Nu kun je myls typen in plaats van de volledige opdracht. Om te zien wat myls werkelijk is, start je de opdracht type myls op. Je kunt met alias een lijst met de gedefinieerde aliassen per regel te zien krijgen.

Shell-functies zijn iets flexibeler dan aliassen. Een alias substitueert gewoon een langere opdracht als je een kortere opdracht intikt. Functies laten je gebruik maken van een serie opdrachten om een actie uit te voeren.

Laten we allereerst eens bekijken hoe hier een shell-functie in plaats van een alias voor kan worden gebruikt:
myls() {
ls --almost-all --color=auto $*
}

Dit wordt een functiedefinitie genoemd, omdat het de functie een naam (myls) geeft, en vervolgens de betekenis van de naam definieert (een aantal uit te voeren opdrachten). Om een functie te definiëren, schrijf je zijn naam, gevolgd door (). Sluit dan de uit te voeren opdrachten in binnen de accolades ({}). Het deel omsloten door de accolades staat bekend als de body van de functie.

Naar de argumenten van de functie kan worden gerefereerd als $*. Dus als je typt:
myls /usr  /etc
zal $* bestaan uit de twee argumenten /usr /etc. Als er geen argumenten zijn, dan zal $* leeg zijn.

Je kunt ook met behulp van nummers naar de argumenten refereren. Dus $1 zou in de body van de functie worden vervangen door /usr, en $2 zou worden vervangen door /etc. Typ deze functie (je kunt het achter de shell-prompt intypen; druk na iedere regel op de return):
print_arguments() {
echo "Eerste argument:   $1"
echo "Tweede argument:   $2"
echo "Alle argumenten:   $*"
}

Je kunt met de opdracht type verifiëren dat je de functiedefinitie correct hebt ingevoerd; type print_arguments zal retourneren:
print_arguments is a function
print_arguments () 
{ 
echo "Eerste argument:   $1";
echo "Tweede argument:   $2";
echo "Alle argumenten:   $*"
}

Probeer de functie uit. Als je print_arguments een twee opgeeft, zal het weergeven:
Eerste argument:   een
Tweede argument:   twee
Alle argumenten:   een twee

Er zijn heel wat complexere dingen die je met een shell-functie kunt doen; je bent slechts beperkt tot je verbeelding.