Parameter Substitution (Bash): verschil tussen versies
Regel 87: | Regel 87: | ||
<pre> | <pre> | ||
− | $ | + | $ i1="Hello, world1, world2 & world3!" |
$ echo ${i1//world/moon} | $ echo ${i1//world/moon} | ||
Hello, moon1, moon2 & moon3! | Hello, moon1, moon2 & moon3! | ||
</pre> | </pre> | ||
+ | |||
+ | Zie https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html voor overige opties. | ||
== Zie ook == | == Zie ook == |
Versie van 1 aug 2021 19:13
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!
Standaard wordt alleen de eerste occurence van pattern vervangen:
$ i1="Hello, world1, world2 & world3!" $ echo ${i1/world/moon} Hello, moon1, world2 & world3!
Dat kun je aanpassen door pattern met een /
te laten beginnen:
$ i1="Hello, world1, world2 & world3!" $ echo ${i1//world/moon} Hello, moon1, moon2 & moon3!
Zie https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html voor overige opties.