Solo una nota / resumen rápido para cualquiera que haya venido aquí a través de Google en busca de la respuesta a la pregunta general formulada en el título (como yo). Cualquiera de los siguientes debería funcionar para obtener acceso a las variables de shell entre comillas:
echo "$VARIABLE"
echo "${VARIABLE}"
El uso de comillas simples es el problema principal. Según el Manual de referencia de Bash :
Incluir caracteres entre comillas simples ( '
) conserva el valor literal de cada carácter dentro de las comillas. Una comilla simple no puede aparecer entre comillas simples, incluso cuando esté precedida por una barra invertida. [...] Encerrar caracteres entre comillas dobles ( "
) preserva el valor literal de todos los caracteres dentro de las comillas, con la excepción de $
, `
, \
, y, cuando se habilita la expansión de historia, !
. Los caracteres $
y `conservan su significado especial entre comillas dobles (ver Expansiones de Shell). La barra invertida mantiene su significado especial sólo cuando es seguida por uno de los siguientes caracteres: $
, `
, "
,\
o nueva línea. Entre comillas dobles, se eliminan las barras diagonales inversas seguidas por uno de estos caracteres. Las barras invertidas que preceden a los caracteres sin un significado especial no se modifican. Una comilla doble puede estar entre comillas dobles precediéndola con una barra invertida. Si está habilitado, la expansión del historial se realizará a menos que una que !
aparezca entre comillas dobles se escape usando una barra invertida. La barra invertida que precede al !
no se elimina. Los parámetros especiales *
y @
tienen un significado especial cuando están entre comillas dobles (consulte Expansión de parámetros de Shell).
En el caso específico planteado en la pregunta, $ COLUMNS es una variable especial que tiene propiedades no estándar (consulte la respuesta de lhunath arriba).