Command substitution (Bash)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

In Bash-programming kom je al snel de volgende expressies tegen:

  • `...` - Backticks command substitution
  • $(...) - Parenthesis command substitution
  • ${...} - Curly braces substitution of Parameter expansion.

Dit zijn alledrie voorbeelden van substitution of expansion. Het betekent zoiets als Evalueer eerst de expressie hierbinnen.

Om het leven eenvoudig te maken:

  • Backtics zijn achterhaald binnen Bash (ze zijn echter nog steeds onderdeel van de POSIX-standaard). Daarnaast zijn ze lastiger te gebruiken en kun je ze bv. niet nesten
  • Curly braces zijn bedoeld voor parameter substitution (wo/ find-&-replace) - Niet het onderwerp van dit artikel

Gebruik daarom parenthesis command substitution - De rest van dit hoofdstuk is hiertoe beperkt, tenzij anders aangegeven.

man bash zegt vanaf regel 1.332 het volgende over command substitution:

Command substitution allows the output of a command to replace the command name.  There are two forms:


       $(command)
or
       `command`

Bash performs the expansion by executing command in a subshell environment and replacing the command substi‐
tution  with  the standard output of the command, with any trailing newlines deleted.  Embedded newlines are
not deleted, but they may be removed during word splitting.  The command substitution $(cat file) can be re‐
placed by the equivalent but faster $(< file).

When the old-style backquote form of substitution is used, backslash retains its literal meaning except when
followed by $, `, or \.  The first backquote not preceded by a backslash terminates  the  command  substitu‐
tion.   When using the $(command) form, all characters between the parentheses make up the command; none are
treated specially.

Command substitutions may be nested.  To nest when using the backquoted form, escape  the  inner  backquotes
with backslashes.

If the substitution appears within double quotes, word splitting and pathname expansion are not performed on
the results.

Zie ook

Bronnen