Tylko krótka notatka / podsumowanie dla każdego, kto przyszedł tutaj przez Google, szukając odpowiedzi na ogólne pytanie zadane w tytule (tak jak ja). Aby uzyskać dostęp do zmiennych powłoki wewnątrz cudzysłowów, powinno działać dowolne z poniższych:
echo "$VARIABLE"
echo "${VARIABLE}"
Głównym problemem jest stosowanie pojedynczych cudzysłowów. Zgodnie z podręcznikiem Bash Reference Manual :
Ujmowanie znaków w pojedyncze cudzysłowy ( ') zachowuje dosłowną wartość każdego znaku w cudzysłowie. Pojedynczy cudzysłów nie może występować między pojedynczymi cudzysłowami, nawet jeśli jest poprzedzony odwrotnym ukośnikiem. [...] obudów znaków w cudzysłowach ( ") chroni dosłowne wartości wszystkich znaków w cudzysłowie, z wyjątkiem $, `, \i, gdy ekspansja historia jest włączona !. Znaki $i `zachowują swoje specjalne znaczenie w cudzysłowach (zobacz Rozszerzenia powłoki). Odwrotny ukośnik zachowuje specjalne znaczenie tylko wtedy, gdy następuje jedno z następujących znaków: $, `, ",\lub nowa linia. W podwójnych cudzysłowach usuwane są ukośniki odwrotne, po których następuje jeden z tych znaków. Ukośniki odwrotne poprzedzające znaki bez specjalnego znaczenia pozostają niezmienione. Podwójny cudzysłów można cytować w cudzysłowie, poprzedzając go lewym ukośnikiem. Jeśli ta opcja jest włączona, !interpretacja historii będzie wykonywana, chyba że znak znajdujący się w cudzysłowie zostanie zastąpiony lewym ukośnikiem. Odwrotny ukośnik poprzedzający !nie jest usuwany. Parametry specjalne *i @mają specjalne znaczenie, gdy są umieszczone w cudzysłowach (zobacz Rozszerzanie parametrów powłoki).
W konkretnym przypadku zadanym w pytaniu $ COLUMNS jest specjalną zmienną, która ma niestandardowe właściwości (patrz odpowiedź lhunatha powyżej).