Linux Know-How provides a collection of introductory texts on often needed Linux skills. |
Home Bash Guide for Beginners More on variables Operations on variables | |||||||||||
See also: Brace expansion | |||||||||||
Search the VIAS Library | Index | |||||||||||
Operations on variablesArithmetic on variablesWe discussed this already in Section 3.4.6. Length of a variableUsing the ${#VAR} syntax will calculate the number of characters in a variable. If VAR is "*" or "@", this value is substituted with the number of positional parameters or number of elements in an array in general. This is demonstrated in the example below:
Transformations of variablesSubstitution${VAR:-WORD} If VAR is not defined or null, the expansion of WORD is substituted; otherwise the value of VAR is substituted:
This form is often used in conditional tests, for instance in this one:
It is a shorter notation for
See Section 7.1.2.3 for more information about this type of condition testing. If the hyphen (-) is replaced with the equal sign (=), the value is assigned to the parameter if it does not exist:
The following syntax tests the existence of a variable. If it is not set, the expansion of WORD is printed to standard out and non-interactive shells quit. A demonstration:
Using "+" instead of the exclamation mark sets the variable to the expansion of WORD; if it does not exist, nothing happens. Removing substringsTo strip a number of characters, equal to OFFSET, from a variable, use this syntax: ${VAR:OFFSET:LENGTH} The LENGTH parameter defines how many characters to keep, starting from the first character after the offset point. If LENGTH is omitted, the remainder of the variable content is taken:
${VAR#WORD} and ${VAR##WORD} These constructs are used for deleting the pattern matching the expansion of WORD in VAR. WORD is expanded to produce a pattern just as in file name expansion. If the pattern matches the beginning of the expanded value of VAR, then the result of the expansion is the expanded value of VAR with the shortest matching pattern ("#") or the longest matching pattern (indicated with "##"). If VAR is * or @, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If VAR is an array variable subscribed with "*" or "@", the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list. This is shown in the examples below:
The opposite effect is obtained using "%" and "%%", as in this example below. WORD should match a trailing portion of string:
Replacing parts of variable namesThis is done using the ${VAR/PATTERN/STRING} or ${VAR//PATTERN/STRING} syntax. The first form replaces only the first match, the second replaces all matches of PATTERN with STRING:
More information can be found in the Bash info pages.
|
|||||||||||
Home Bash Guide for Beginners More on variables Operations on variables |