Просто краткое примечание / резюме для всех, кто пришел сюда через Google в поисках ответа на общий вопрос, заданный в заголовке (как и я). Любое из следующих действий должно работать для получения доступа к переменным оболочки внутри кавычек:
echo "$VARIABLE"
echo "${VARIABLE}"
Использование одинарных кавычек - основная проблема. Согласно справочному руководству Bash :
Заключение символов в одинарные кавычки ( ') сохраняет буквальное значение каждого символа внутри кавычек. Одинарные кавычки не могут находиться между одинарными кавычками, даже если им предшествует обратная косая черта. [...] Ограждающие символы в двойных кавычках ( ") сохраняет буквальное значение всех символов в кавычках, за исключением $, `, \и, когда раскрывание истории включено, !. Символы $и `сохраняют свое особое значение в двойных кавычках (см. Расширения оболочки). Обратный слэш сохраняет свой особый смысл только тогда , когда следует один из следующих символов: $, `, ",\, или перевод строки. В двойных кавычках удаляются обратные косые черты, за которыми следует один из этих символов. Обратные косые черты перед символами без специального значения остаются неизменными. Двойные кавычки можно заключить в двойные кавычки, поставив перед ними обратную косую черту. Если этот параметр включен, раскрытие истории будет выполняться, если только !появление в двойных кавычках не будет экранировано с помощью обратной косой черты. Обратная косая черта перед символом !не удаляется. Специальные параметры *и @имеют особое значение в двойных кавычках (см. Расширение параметров оболочки).
В конкретном случае, заданном в вопросе, $ COLUMNS - это специальная переменная, которая имеет нестандартные свойства (см. Ответ lhunath выше).