Parameter Substitution (Bash)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Parameter substitution, parameter expansion of shell parameter expansion betekent dat in een Bash-expressie een parameter of variabele wordt vervangen door de inhoud van die variabele, al of niet in combinatie met een bewerking.

Parameter expansion wordt aangegeven met $, vaak in combinatie met accolades: ${}, of nog completer: ${parameter}.

${}

Zoiets simpels als het weergeven van de waarde van een variabele, is al een voorbeeld van parameter substitution:

$ a=12
$ echo $a

12

Door accolades toe te voegen, is het concept van expansie misschien nog duidelijker. Ihb., dat parameter-namen binnen accolades geen $-teken krijgen

$ a=12
$ echo ${i}

12

${parameter:-word}

Gebruik deze syntaxis om parameter te vervangen door literal word als deze eerste leeg is. Zoiets als ifnull(a, b) is SQL:

# De parameter bestaat en heeft een waarde:

$ i1="Hello, world!"
$ echo ${i1:-De parameter is leeg!}

Hello, world!
# De parameter bestaat niet - De literal wordt weergegeven

$ i1="Hello, world!"
$ echo ${i3:-De parameter is leeg!}

De parameter is leeg!

Wil je in plaats van een literal een parameter meegeven? Geen probleem: Daar gaat dit artikel over:

$ i1="Hello, world!"
$ i2="Vervanging"
$ echo ${i3:-${i2}}

Vervanging

Als de parameter wel bestaat, maar leeg is:

$ i1=
$ echo ${i1:-Leeg}

Leeg

${parameter/pattern/string}

Parameter expansion kun je gebruiken voor find-&-replace:

$ i1="Hello, world!"
$ echo ${i1/world/moon}

Hello, moon!

Find-&-replace

Gelijk al een raar voorbeeld: Het eerste argument moet een variabele zijn, maar de tweede en derde zijn literals???

naam="Janneke"
echo ${naam/a/A}
JAnneke


# Dit doet nix, want variable heeft geen waarde:
# 
echo ${Jasper/a/A}


# Dit geeft foutmelding - Snap ik niet
#
echo ${"Jasper"/a/A}
echo ${"Jasper"/a/A}: bad substitution

Zie ook

Bronnen