| ${#string} | Length of $string |
| ${string:position} | Extract substring from $string at $position |
| ${string:position:length} | Extract $length characters substring from $string at $position [zero-indexed, |
| ${string#substring} | Strip shortest match of $substring from front of $string |
| ${string##substring} | Strip longest match of $substring from front of $string |
| ${string%substring} | Strip shortest match of $substring from back of $string |
| ${string%%substring} | Strip longest match of $substring from back of $string |
| ${string/substring/replacement} | Replace first match of $substring with $replacement |
| ${string//substring/replacement} | Replace all matches of $substring with $replacement |
| ${string/#substring/replacement} | If $substring matches front end of $string, substitute $replacement for $substring |
| ${string/%substring/replacement} | If $substring matches back end of $string, substitute $replacement for $substring |
| expr match “$string” ‘$substring’ | Length of matching $substring* at beginning of $string |
| expr “$string” : ‘$substring’ | Length of matching $substring* at beginning of $string |
| expr index “$string” $substring | Numerical position in $string of first character in $substring* that matches [0 if no match, first character counts as position 1] |
| expr substr $string $position $length | Extract$length characters from $string starting at $position [0 if |
| expr match “$string” ‘($substring)’ | Extract$substring*, searching from beginning of $string |
| expr “$string” : ‘($substring)’ | Extract$substring* , searching from beginning of $string |
| expr match “$string” ‘.*($substring)’ | Extract$substring*, searching from end of $string |
| expr “$string” : ‘.*($substring)’ | Extract$substring*, searching from end of $string |