Apenas uma nota / resumo rápido para quem veio aqui através do Google em busca da resposta à pergunta geral feita no título (como eu estava). Qualquer um dos itens a seguir deve funcionar para obter acesso às variáveis do shell entre aspas:
echo "$VARIABLE"
echo "${VARIABLE}"
O uso de aspas simples é o principal problema. De acordo com o Manual de Referência Bash :
Colocar caracteres entre aspas simples ( '
) preserva o valor literal de cada caractere entre aspas. Uma aspa simples não pode ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida. [...] personagens que encerram em aspas duplas ( "
) preserva o valor literal de todos os caracteres entre as aspas, com exceção de $
, `
, \
, e, quando a expansão história está habilitado, !
. Os caracteres $
e `retêm seu significado especial entre aspas duplas (consulte Expansões do Shell). A barra invertida mantém o seu significado especial apenas quando seguido por um dos seguintes caracteres: $
, `
, "
,\
, ou nova linha. Entre aspas duplas, as barras invertidas seguidas por um desses caracteres são removidas. As barras invertidas que precedem os caracteres sem um significado especial não são modificadas. Uma aspa dupla pode ser colocada entre aspas duplas, precedendo-a com uma barra invertida. Se ativada, a expansão do histórico será executada, a menos que um !
símbolo que aparece entre aspas duplas seja escapado por uma barra invertida. A barra invertida que precede o !
não é removida. Os parâmetros especiais *
e @
têm um significado especial quando entre aspas duplas (ver Shell Parâmetro de Expansão).
No caso específico da pergunta, $ COLUMNS é uma variável especial que possui propriedades não padronizadas (veja a resposta de lhunath acima).