2012-01-03 26 views
8

私はbashでスクリプトを書いています。コマンドを実行して、それぞれの行を別々に処理したいと思います。変数内に複数行出力を配置する

LINES=$(df) 
echo $LINES 

出力を変換するすべての改行をスペースで返します。

例:その後、私は新しいを可能変数にコマンドの出力を配置することができますどのように

1 2 3 

になるだろう

1 
2 
3 

出力が可能になっていた場合行はまだ新しい行になるので、変数を出力すると適切な出力が得られますか?

答えて

11

一般的に、bashの$vはほとんどの場合問題を求めています。ほとんどの場合、実際には"$v"が二重引用符で囲まれています。

LINES="`df`"  # double-quote + backtick 
echo "$LINES" 
OLDPATH="$PATH" 
+6

実際に変数に代入すると、変数に代入するときに展開結果が単語分割されないため、引用符が必要になりません。しかし、彼らは何かを傷つけることはありませんし、あなたの筋肉の記憶を訓練して、すべての拡張について二重引用符を入力する方が簡単です。 –

+0

おかげで、ありがとう! – kubanczyk

6

いいえ、そうではありません。 $(something)は、改行の後ろを取り除きます。

エイリアスをエイリアスに展開してエコーをエコーすると、引数をスペースで区切って連結します。空白を保持するには、再度引用する必要があります:割り当てはを引用符で囲む必要はありませないこと

echo "$LINES" 

注意を。拡張の結果は変数への代入では単語分割されず、caseへの引数では分割されません。しかし、引用符で囲むことができます。

+0

本当ですか?私は 'LINES = $(df);で期待される結果を得ました。 echo "$ {LINES}" 'おそらくIFSは私たちの環境では異なっています。それでも、@ kubanczykの回答 – nhed

+0

@nhedでは、 '$(df)'が単一のバッククォートの引用よりも優れています。 – kubanczyk

+0

@nhed:右...変数への代入は決して分割しません。私はここでそれをテストしたときに何かから来ていることが判明したエラーメッセージによって混乱しました。 –

関連する問題