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