Solo una breve nota / riepilogo per chi è venuto qui tramite Google alla ricerca della risposta alla domanda generale posta nel titolo (come lo ero io). Uno dei seguenti dovrebbe funzionare per ottenere l'accesso alle variabili di shell tra virgolette:
echo "$VARIABLE"
echo "${VARIABLE}"
L'uso di virgolette singole è il problema principale. Secondo il manuale di riferimento di Bash :
Racchiudere i caratteri tra virgolette singole ( '
) preserva il valore letterale di ogni carattere tra virgolette. Una singola virgoletta potrebbe non essere presente tra virgolette singole, anche se preceduta da una barra rovesciata. [...] Racchiudere caratteri in virgolette doppie ( "
) conserva il valore letterale di tutti i caratteri all'interno delle virgolette, ad eccezione di $
, `
, \
e, quando l'espansione della cronologia è abilitata, !
. I caratteri $
e `mantengono il loro significato speciale tra virgolette doppie (vedere Espansioni shell). Il backslash mantiene il suo significato speciale solo quando seguito da uno dei seguenti caratteri: $
, `
, "
,\
o una nuova riga. All'interno di virgolette doppie, le barre rovesciate seguite da uno di questi caratteri vengono rimosse. I backslash che precedono i caratteri senza un significato speciale non vengono modificati. Una virgoletta doppia può essere citata tra virgolette doppie precedendola con una barra rovesciata. Se abilitato, l'espansione della cronologia verrà eseguita a meno che non !
venga evitato un carattere di escape tra virgolette doppie utilizzando una barra rovesciata. La barra rovesciata che precede !
non viene rimossa. I parametri speciali *
e @
hanno un significato speciale quando sono racchiusi tra virgolette doppie (vedere Espansione dei parametri della shell).
Nel caso specifico posto nella domanda, $ COLUMNS è una variabile speciale che ha proprietà non standard (vedere la risposta di lhunath sopra).