2012-09-17 11 views
15

W Bash (lub innych powłokach) w jaki sposób mogę wydrukować zmienną środowiskową, która ma wartość wielowierszową?Wydrukuj zmienną z wartością wielowierszową w powłoce?

text='line1 
line2' 

wiem prosty zwykle echo $text nie będzie działać po wyjęciu z pudełka. Czy jakieś ulepszenia IFS pomogą?

Moje bieżące obejście to coś takiego jak ruby -e 'print ENV["text"]'. Czy można to zrobić w czystej powłoce? Zastanawiam się, czy polecenie env przyjąłby nierozwiązaną nazwę var, ale nie wydaje się.

+0

Dlaczego pochylać się do tyłu z odsunięciami? Po prostu wykonaj 'text = 'line1 line2'' (więc przypisanie obejmuje dwie literalne linie tekstu) lub' text = $' line1 \ nline2'', jeśli jesteś zadowolony z ograniczonej możliwości przenoszenia. –

+1

z bash, sposobem na przeniesienie tego tekstu do zmiennej jest 'text = $ 'line1 \ nline2''pl –

+0

@WilliamPursell Wiedziałem, że to było prostsze niż to, że spróbowałem najpierw heredoc, ale to nie działało ... ale oczywiście zwykły ciąg wielowierszowy jest prostszy ... jest po prostu bardzo późno, aby odświeżyć wspomnienia basha. dzięki. – inger

Odpowiedz

28

Takie samo rozwiązanie jak zawsze.

echo "$text" 
+1

Przepraszam, jak to się różni od echo $ text? – inger

+3

Istnieją podwójne cytaty, które blokują dzielenie wyrazów w bashu. –

+0

To dzięki! Przepraszam, nie zdawałem sobie sprawy, że problemem było plucie tutaj .. – inger

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

daje wyjście:

A\nB\nC 

ale:

echo -e $TEST 
A 
B 
C 

Tak, odpowiedź wydaje się być parametr '-e' do echo, zakładając że dobrze rozumiem twoje pytanie.

+2

Dzięki, to naprawdę miłe ... jednak w moim scenariuszu var zawiera prawdziwy znak LF zamiast sekwencji ucieczki. Teraz wyjaśniam pytanie. – inger

Powiązane problemy