2016-06-29 13 views
9

私には変数FOOがあり、私には複数の行になる値を割り当てる必要があります。このような何か、複数行の値をbash変数に割り当てる方法

FOO="This is line 1 
    This is line 2 
    This is line 3" 

私はFOOの値を印刷するときに、それは次の出力を与える必要があります。

echo $FOO 
output: 
This is line 1 
This is line 2 
This is line 3 

さらに、ループを使用して初期化するため、行数が動的に決定されます。私は集中的な文字列操作をしていて

read -dを使用して他の質問に示されてきた答えは私に適していないと、コードのフォーマットも重要です。

+2

ライン2と3で空白と使用をリードする削除: 'エコー「の$ FOO」出力を与える' – Cyrus

答えて

22

からの賢明な言葉は行をインデントしないか、余分なスペースを取得します。 "$FOO"を展開したときに改行が保持されるようにするには、引用符を使用します。

$ FOO="This is line 1 
This is line 2 
This is line 3" 
$ echo "$FOO" 
This is line 1 
This is line 2 
This is line 3 

もう1つの方法は、\nエスケープシーケンスを使用することです。それらは$'...'文字列内で解釈されます。

$ FOO=$'This is line 1\nThis is line 2\nThis is line 3' 
$ echo "$FOO" 

第三の方法は、文字\n保存し、その後、echo -eは、エスケープシーケンスを解釈することです。それは微妙な違いです。重要な部分は、\nは通常の引用符の中で解釈されないということです。

$ FOO='This is line 1\nThis is line 2\nThis is line 3' 
$ echo -e "$FOO" 
This is line 1 
This is line 2 
This is line 3 

あなたは-eオプションを削除し、echo印刷何かを解釈せずに生の文字列を持っている場合、私は作ってるんだ違いを見ることができます。

$ echo "$FOO" 
This is line 1\nThis is line 2\nThis is line 3 
+0

こんにちはJohn、あなたのサンプルコードは私のために働く!しかし、上記の最初の例では、$ FOOを二重引用符で囲まずに '' 'echo $ FOO'''で変数をエコーすると、出力は同じ行に表示されます。なぜなのかご存知ですか?私はUbuntu 14.04でGNU bash、バージョン4.3.11(1)-releaseを使用しています。 – yaobin

+0

引用符をつけていないときに起こることです。この値は、*単語分割*および* glob展開*の対象となります。埋め込み改行で1つの引数を出力するように指示される 'echo'の代わりに、 '$ FOO'の各単語は、改行なしで別々の引数になります。これは 'echo 1行目です。これは2行目です。これは3行目です。 'と書いたかのようです。ボトムライン:実際には単語の分割とグロブ(希)の対象にしない限り、常に変数の展開を引用します。 –

3

FOOを初期化するときは、改行:\nを使用する必要があります。

FOO="This is line 1\nThis is line 2\nThis is line 3" 

次に出力FOOecho -eを使用しています。リテラルn続く、

"..."内部\nは、改行はないことに注意することが重要ですが、\リテラル。 の場合は、echo -eと解釈され、このリテラルシーケンスは改行文字に変換されます。 - mklement0


#!/bin/bash 

FOO="This is line 1\nThis is line 2\nThis is line 3" 
echo -e $FOO 

Output: 
This is line 1 
This is line 2 
This is line 3 
+0

その-eこれはこれはこれはライン3' – juned

+0

おかげでライン2 あるライン1 ある 'として。私のために働いています。 – molecule

+2

@juned '-e'をサポートする' echo'のバージョンが必要です。 Bashの組み込みechoコマンドはGNUの '/ bin/echo'バイナリと同様に動作します。 –

関連する問題