Это памятка, т. к. периодически забываю.

Извлечение подстроки

${string:position} — с position до конца
${string:position:length} - с position длиной length символов
${string: -length} - последние length символов

Удаление части строки

${string#substring} — до первого с начала
${string##substring} — до последнего с начала
${string%substring} — до первого с конца
${string%%substring} — до последнего с конца

Замена подстроки

${string/substring/replacement} — первое вхождение
${string//substring/replacement} — все вхождения
${var/#Pattern/Replacement} — Если в переменной var найдено совпадение с Pattern, причем совпадающая подстрока расположена в начале строки (префикс), то оно заменяется на Replacement. Поиск ведется с начала строки ${var/%Pattern/Replacement} — Если в переменной var найдено совпадение с Pattern, причем совпадающая подстрока расположена в конце строки (суффикс), то оно заменяется на Replacement. Поиск ведется с конца строки
${#string} — Длина строки

Пример

a="12345"
echo "${a}"
echo "${a:3}"
echo "${a#12}"
echo "${a/12/21}"