The basic form of parameter expansion is :
${parameter}.
The value of parameter is substituted.
Braces are optional when parameter is a single digit positional parameter.
echo $1 +++ $1zzz +++ ${1} +++ ${1}zzzWhen braces are used, the matching ending brace is the first one not escaped by a backslash or within a quoted string, and not within an embedded arithmetic expansion, command substitution, or parameter expansion.
editing-mode +++ editing-modezzz +++ editing-mode +++ editing-modezzz
If the first character of parameter is an ! (exclamation point), a
level of variable indirection is introduced.
Bash uses the value of the variable formed from the rest of parameter as the name of the variable; this
variable is then expanded and that value is used in the rest of the substitution, rather than the value of parameter itself.
This is known as indirect expansion.
In each of the cases below, word is subject to tilde expansion,
parameter expansion, command substitution,
and arithmetic expansion.
${parameter-word}
| If parameter is unset, the expansion of word is substituted. Otherwise, the value of parameter is substituted.
echo ${99-nintyninthParameterIsUNSET}If parameter is unset or null …
|
${parameter=word}
| If parameter is unset , the expansion of word
is assigned to parameter The value of parameter is then substituted.
If |
${parameter?word}
| If parameter is unset, the expansion of word
(or a message to that effect if word is not present) is written to
the standard error and the shell exits (unless it is not interactive). Otherwise, the value of parameter is substituted.
If |
${parameter:+word} ${parameter:+word} | If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted. |
${parameter:offset:length} ${parameter:offset}
| Expands to up to length characters of parameter,
starting at the character specified by offset. If length is omitted,
expands to the substring of parameter, starting at the
character specified by offset. length and
offset are arithemtic expressions.
This is a Substring Expansion.
|
${#parameter}
| The length in characters of the expanded value of parameter is substituted.
echo $1 +++ ${#1}
|
word is expanded to produce a pattern as in filename expansion.
| |
|---|---|
${parameter#word} ${parameter##word}
|
|
${parameter%word} ${parameter%%word}
|
|
pattern is expanded to produce a pattern as in filename expansion
| |
${parameter/[#|%]pattern/string} ${parameter//[#|%]pattern/string} | Parameter is expanded and the longest match of pattern against that value is replaced with string.Only the first ( /) or all (//) match is replaced. For #pattern match beginning of string,
for %pattern match end of string.
|
${parameter/[#|%]pattern}
${parameter//[#|%]pattern}
|
string is null, matches of pattern are deleted. The / following pattern is optional.
${*# … or ${@# …, ${*% … or ${@% … the substitution is applied to positional parameters and the result is the list. parameter is an array variable subscripted with @ or *, the substitution
is applied to each member of the array in turn. Result is that list.
|