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).