Default Usage
${PARAMETER}
Expand parameter value. It can be used for:
- Separating characters from variable names
cd /home/${user}
- Positional parameter higher than 9
echo "Argument 10 is: ${10}"
Indirection
${!PARAMETER}
Expands to the value of the variable named by the value of parameter.
var=var1
var1=temp
$ echo ${!var}
temp
Case Modification
${PARAMETER^}, ${PARAMETER^^}
${PARAMETER,}, ${PARAMETER,,}
${PARAMETER~}, ${PARAMETER~~}
Operator | Action |
---|---|
^ | Changes first character to upper case |
^^ | Changes all characters to upper case |
, | Changes first character to lower case |
,, | Changes all characters to lower case |
~ | Inverts case of first character |
~~ | Inverts case of all characters |
Variable Name (Prefix) Expansion
${!PREFIX*}
${!PREFIX@}
Expands to a list of all set variable names beginning with the string in
PREFIX
.$ echo ${!XDG*}
XDG_CURRENT_DESKTOP XDG_MENU_PREFIX XDG_RUNTIME_DIR XDG_SEAT XDG_SESSION_DESKTOP XDG_SESSION_ID XDG_SESSION_TYPE XDG_VTNR
Substring Removal
${PARAMETER#PATTERN}
${PARAMETER##PATTERN}
${PARAMETER%PATTERN}
${PARAMETER%%PATTERN}
With
#
, it removes the mathing pattern from the beggining of the variable, where #
removes the shortest match, and ##
removes the longest.
Note the empty spaces in the example below.
substr="the quick brown fox jumps over the lazy dog"
$ echo ${substr#* }
quick brown fox jumps over the lazy dog
$ echo ${substr##* }
dog
Removing path from a file:
mlog=/var/log/clamav/freshclam.log
$ echo ${mlog##*/}
freshclam.log
The operator
%
does the same, but at the end of the file.$ echo ${substr% *}
the quick brown fox jumps over the lazy
$ echo ${substr%% *}
the
Changing the extension of a file
file=123.txt
$ echo ${file%.*}
123
$ echo ${file%.*}.log
123.log
Search and Replace
${PARAMETER/PATTERN/STRING}
${PARAMETER//PATTERN/STRING}
${PARAMETER/PATTERN}
${PARAMETER//PATTERN}
The main diffence is that a single
/
substitutes the first occurrence, while double //
substitute all occurences:$ echo $substr
the quick brown fox jumps over the lazy dog
$ echo ${substr/the/da}
da quick brown fox jumps over the lazy dog
$ echo ${substr//the/da}
da quick brown fox jumps over da lazy dog
$ echo ${substr/the}
quick brown fox jumps over the lazy dog
$ echo ${substr//the}
quick brown fox jumps over lazy dog
Anchoring
You can use
#
and %
to anchor to the beginning and end respectivelyvar1=00000000
$ echo ${var1/#0/1}
10000000
$ echo ${var1/%0/1}
00000001
Offset and Lenght
${PARAMETER:OFFSET}
${PARAMETER:OFFSET:LENGTH}
- Offset removes the amount of characters as specified
- Lenght prints the specified character lenght after offset
Note: You can also use a negative value for offset and lenght, which will be calculated from the end of the file
$ echo ${substr}
the quick brown fox jumps over the lazy dog
123456789...
Removes first 9 chars
$ echo ${substr:9}
brown fox jumps over the lazy dog
Removes first 3 chars and print the next 5
$ echo ${substr:4:5}
quick
Use Default
${PARAMETER:-WORD}
${PARAMETER-WORD}
If parameter unset (or null if using
:
), expand to word.$ my_var=gru
$ echo ${my_var:-yyz}
gru
$ unset my_var
$ echo ${my_var:-yyz}
yyz
Use Alternate Value
${PARAMETER:+WORD}
${PARAMETER+WORD}
If parameter is set (or null if using
:
), expand to word.$ my_var=gru
$ echo ${my_var:+yyz}
yyz
$ unset my_var
$ echo ${my_var:+yyz}
Use Default And Assign
${PARAMETER:=WORD}
${PARAMETER=WORD}
If parameter unset (or null if using
:
), expand to word and assign parameter to the value of word.my_var=gru
$ echo ${my_var:=yyz}
gru
$ unset my_var
$ echo ${my_var:=yyz}
yyz
$ echo $my_var
yyz
Display Error
${PARAMETER:?WORD}
${PARAMETER?WORD}
If parameter unset (or null if using
:
), display error with word as appendix, otherwise expand parameter.my_var=gru
$ echo ${my_var:?Not set}
gru
$ unset my_var
$ echo ${my_var:?Not set}
bash: my_var: Not set
Reference:
No comments:
Post a Comment