2012-09-17 15 views
15

Bash(または他のシェル)では、複数行の値を持つ環境変数をどのように印刷できますか?シェルに複数行の値を持つ変数を出力しますか?

text='line1 
line2' 

私はいつもシンプルecho $textは、箱から出して動作しません知っています。 いくつかの$ IFS調整が役立つでしょうか?

私の現在の回避策は、ruby -e 'print ENV["text"]'のようなものです。 純粋なシェルでこれを行うことはできますか? envコマンドが未解決のvar名を取るかどうか疑問に思っていたが、そう思わない。

+0

バックテックで後方に曲がるのはなぜですか?制限された移植性に満足すれば 'text = 'line1 line2''(代入は2つのリテラルテキスト行にまたがる)または' text = $' line1 \ nline2''を実行してください。 –

+1

とbashを使うと、そのテキストを変数に取り込む方法は 'text = $ 'line1 \ nline2'' –

+0

です。@WilliamPursell私はheredocを最初に試したよりも簡単だと分かっていましたが、うまくいきませんでした。単純な複数行の文字列はより簡単です。ちょうど私のbashの思い出をリフレッシュするのは非常に遅いです。ありがとう。 – inger

答えて

28

常に同じソリューション。

echo "$text" 
+1

申し訳ありませんが、echo $ textとどう違うのですか? – inger

+3

二重引用符があり、bashの単語分割を禁止します。 –

+0

それはありがとう!申し訳ありませんが、この問題はここでは単語が吐き出されたことを認識していませんでした。 – inger

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

は出力が得られます。

A\nB\nC 

しかし:だから

echo -e $TEST 
A 
B 
C 

、答えがに '-e' パラメータのようだと仮定すると、エコー私はあなたの質問を正しく理解しています。

+2

ありがとう、それは確かにいいです..しかし、私のシナリオでは、varは、エスケープシーケンスではなく、本物のLFの文字が含まれています。今質問を明確にする。 – inger

関連する問題