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