Expansiones de variables en BASH

Existen maneras de que se modifique el contenido de una variable usando las expansiones o los patrones de BASH. Esto es muy útil en scripts, así que aquí pongo algunos ejemplos:
### Expansión de variables con ${} ###
 
## Valor por defecto
# Si no está definida una variable, se usa un valor predeterminada. Si está definida, 
# se usa su valor
echo ${NAME:-Pepe}
# -> Pepe
NAME="Juanje"
echo ${NAME:-Pepe}
# -> Juanje
 
 
## Asignar valor por defecto
# Asigna un valor a la variable, pero sólo si está ntiene ya algún valor.
NAME=""
echo $NAME
# -> 
echo ${NAME:=Pepe}
# -> Pepe
echo $NAME
# -> Pepe
echo ${NAME:=Juanje}
# -> Pepe
 
 
## Muestra error si no existe la variable (No si está vacia o no)
# Podemos poner un mensaje personalizado al error
echo ${X?}
# -> -bash: X: parameter null or not set
echo ${X?La variable X no exite}
# -> -bash: X: La variable X no exite
X=""
echo ${X?La variable X no exite}
# -> 
X="Algo"
echo ${X?La variable X no exite}
# -> Algo
 
 
## Usar un valor alternativo, si ya existe la variable y tiene algún valor.
echo ${Y:+Contenido alternativo}
# -> 
Y=""
echo ${Y:+Contenido alternativo}
# -> 
Y="Algún contenido"
echo ${Y:+Contenido alternativo}
# -> Contenido alternativo
 
 
## Subcadenas del valor de la variable
# :{inicio}:{tamaño
# Si no se pone el tamañ, se coje la cadena desde el {inicio}, hasta el final
# Se empieza a contar por 0
TEXT="Un texto de ejemplo"
echo ${TEXT:3}
# -> texto de ejemplo
echo ${TEXT:3:5}
# -> texto
 
 
## Subcadena quitando del principio
# Con un sólo # se quitará la primera ocurrencia de lo que esté detrás
B="blablabla..."
echo ${B#bla}
# -> blabla...
echo ${B#*bla}
# -> blabla...
# Con 2 # se eliminarón cadenas más largas
echo ${B##bla}
# -> blabla...
echo ${B##*bla}
# -> ...
# Otro ejemplo práctico:
D="/srv/chroot/var/chroot/etc/apache"
echo ${D#*chroot}
# -> /var/chroot/etc/apache
echo ${D##*chroot}
# -> /etc/apache
 
 
## Subcadena quitando del final
# Con un sólo # se quitará última ocurrencia de lo que esté detrás
B="blablabla...blablabla"
echo ${B%bla}
# -> blablabla...blabla
echo ${B%bla*}
# -> blablabla...blabla
# Con 2 % se eliminarón cadenas más largas
echo ${B%%bla}
# -> blablabla...blabla
echo ${B%%bla*}
# -> 
# Otro ejemplo práctico:
D="/srv/chroot/var/chroot/etc/apache"
echo ${D%chroot*}
# -> /srv/chroot/var/
echo ${D%%chroot*}
# -> /srv/
 
 
## Nombres de variables que empiecen por un prefijo
echo ${!U*}
# -> UID USER
echo ${!B*}
# -> B BASH BASH_VERSINFO BASH_VERSION
echo ${!BASH*}
# -> BASH BASH_VERSINFO BASH_VERSION
 
## Tamaño del contenido de una variable, en caracteres
X="Un texto cualquiera"
echo ${#X}
# -> 19
N=22435
echo ${#N}
# -> 5
 
 
# Sustituir una cadena
a=/etc/kung/foo
echo ${a/foo/fu}
# -> /etc/kung/fu
Lenguaje: 
bash