|
| 1 | ++++ |
| 2 | +title = "Bash: Parameter expansion" |
| 3 | ++++ |
| 4 | + |
| 5 | +In Bash, the `$` character can be used to introduce parameter expansion. |
| 6 | + |
| 7 | +Here's a brief list of such parameter expansions: |
| 8 | + |
| 9 | +- Use default value: `${parameter:-word}` |
| 10 | +- Assign default value: `${parameter:=word}` |
| 11 | +- Display error if null or unset: `${parameter:?word}` |
| 12 | +- Use alternate value: `${parameter:+word}` |
| 13 | +- Substring expansion: |
| 14 | + - `${parameter:offset}` |
| 15 | + - `${parameter:offset:length}` |
| 16 | +- Names matching prefix: |
| 17 | + - `${!prefix*}` |
| 18 | + - `${!prefix@}` |
| 19 | +- List of array keys: |
| 20 | + - `${!name[@]}` |
| 21 | + - `${!name[*]}` |
| 22 | +- Parameter length: `${#parameter}` |
| 23 | +- Remove matching prefix pattern: |
| 24 | + - `${parameter#word}` |
| 25 | + - `${parameter##word}` |
| 26 | +- Remove matching suffix pattern |
| 27 | + - `${parameter%word}` |
| 28 | + - `${parameter%%word}` |
| 29 | +- Pattern substitutions: |
| 30 | + - `${parameter/pattern/string}` |
| 31 | + - `${parameter//pattern/string}` |
| 32 | + - `${parameter/#pattern/string}` |
| 33 | + - `${parameter/%pattern/string}` |
| 34 | +- Case modification: |
| 35 | + - `${parameterˆpattern}` |
| 36 | + - `${parameterˆˆpattern}` |
| 37 | + - `${parameter,pattern}` |
| 38 | + - `${parameter,,pattern}` |
| 39 | +- Parameter transformation: `${parameter@operator}` |
| 40 | + - `U`: all uppercase |
| 41 | + - `u`: first character uppercase |
| 42 | + - `L`: all lowercase |
| 43 | + - `Q`: quoted for input |
| 44 | + - `E`: expand backslash sequences |
| 45 | + - `P`: prompt string |
| 46 | + - `A`: assignment statement |
| 47 | + - `K`: quoted key-value pairs |
| 48 | + - `a`: parameter's attributes |
| 49 | + - `k`: like `K`, but keys and values are separate words |
| 50 | + |
| 51 | +See [`man bash`](https://www.man7.org/linux/man-pages/man1/bash.1.html) for more information. |
0 commit comments