Parameter Substitution (Bash): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 73: Regel 73:
  
 
Hello, moon!
 
Hello, moon!
</pre>
 
 
== Find-&-replace ==
 
 
Gelijk al een raar voorbeeld: Het eerste argument moet een variabele zijn, maar de tweede en derde zijn ''literals''???
 
 
<pre>
 
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
 
 
</pre>
 
</pre>
  

Versie van 1 aug 2021 20:07

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!

Zie ook

Bronnen