Juste une petite note / résumé pour tous ceux qui sont venus ici via Google à la recherche de la réponse à la question générale posée dans le titre (comme je l'étais). L'un des éléments suivants devrait fonctionner pour accéder aux variables shell entre guillemets:
echo "$VARIABLE"
echo "${VARIABLE}"
L'utilisation de guillemets simples est le principal problème. Selon le manuel de référence Bash :
Mettre les caractères entre guillemets simples ( '
) préserve la valeur littérale de chaque caractère entre les guillemets. Un guillemet simple peut ne pas apparaître entre guillemets simples, même s'il est précédé d'une barre oblique inverse. [...] caractères Enserrage guillemets doubles ( "
) préserve la valeur littérale de tous les caractères dans les citations, à l'exception de $
, `
, \
et, lorsque l' expansion de l' histoire est activée, !
. Les caractères $
et `conservent leur signification spéciale entre guillemets (voir Expansions Shell). La barre oblique inverse conserve sa signification que lorsqu'il est suivi d'un des caractères suivants: $
, `
, "
,\
, ou nouvelle ligne. Entre guillemets doubles, les barres obliques inverses suivies de l'un de ces caractères sont supprimées. Les barres obliques inverses précédant les caractères sans signification particulière ne sont pas modifiées. Un guillemet double peut être placé entre guillemets doubles en le précédant d'une barre oblique inverse. Si cette option est activée, le développement de l'historique sera effectué à moins que les !
guillemets doubles ne soient échappés à l'aide d'une barre oblique inverse. La barre oblique inverse précédant le !
n'est pas supprimée. Les paramètres spéciaux *
et @
ont une signification particulière lorsqu'ils sont entre guillemets (voir Extension des paramètres du shell).
Dans le cas spécifique posé dans la question, $ COLUMNS est une variable spéciale qui a des propriétés non standard (voir la réponse de lhunath ci-dessus).