2012-09-17 19 views
15

In Bash (o altre shell) come posso stampare una variabile di ambiente che ha un valore su più righe?Stampa una variabile con valore multi-linea nella shell?

text='line1 
line2' 

so un semplice solita echo $text non funziona out of the box. Sarebbe utile qualche modifica di $ IFS?

La mia soluzione attuale è qualcosa come ruby -e 'print ENV["text"]'. Questo può essere fatto in puro guscio? Mi chiedevo se il comando env avrebbe preso un nome var non risolto ma non sembra.

+0

Perché piegarsi all'indietro con i backtick? Basta fare 'text = 'line1 line2'' (quindi il compito si estende su due righe letterali di testo), o' text = $' line1 \ nline2'' se sei soddisfatto della portabilità limitata. –

+1

con bash, il modo per ottenere quel testo in una variabile è 'text = $ 'line1 \ nline2'' –

+0

@WilliamPursell Sapevo che era più semplice di quello che ho provato prima con heredoc ma che non funzionava ... ma naturalmente semplice stringa multilinea è più semplice.è solo molto tardi per rinfrescare i miei ricordi di bash. Grazie. – inger

risposta

28

Stessa soluzione come sempre.

echo "$text" 
+1

scusa, com'è diverso da echo $ text? – inger

+3

Esistono virgolette doppie che inibiscono la suddivisione in parole in bash. –

+0

Grazie! scusa non ho capito che il problema era sputare word qui. – inger

2
export TEST="A\nB\nC" 
echo $TEST 

dà uscita:

A\nB\nC 

ma:

echo -e $TEST 
A 
B 
C 

Quindi, la risposta sembra essere il parametro '-e' a eco, assumendo che capisco correttamente la tua domanda.

+2

Grazie, è davvero bello .. comunque nel mio scenario la var contiene un vero char LF piuttosto che la sequenza di escape. Chiarire la domanda ora. – inger

Problemi correlati