2012-01-07 8 views
7

echo -e "a b\nc\nd e"のようなコマンドの出力を配列に変換しようとしています。コマンド出力をbashの行ごとに配列に変換する方法は?

X=($(echo -e "a b\nc\nd e")) 

スプリットごとに改行や空白文字の入力:

$ echo ${#X[@]} 
> 5 

for i in ${X[@]} ; do echo $i ; done 
a 
b 
c 
d 
e 

結果は次のようになります。あなたはあなたの内部フィールド区切り変数を変更する必要が

for i in ${X[@]} ; do echo $i ; done 
a b 
c 
d e 
+0

可能重複http://stackoverflow.com/questions/8750848/how-do-i-create-an-array-in -bash-from-a-command-variable) – Cascabel

+0

誰かがより良い複製を見つけられるかもしれません。それはちょうど最新のものです。おそらくこの質問は何十回も尋ねられています。 – Cascabel

答えて

13

IFS )を最初に改行に変換します。 newlineIFSを設定

$ IFS=$'\n'; arr=($(echo -e "a b\nc\nd e")); for i in ${arr[@]} ; do echo $i ; done 
a b 
c 
d e 
+0

説明をありがとう。私は 'echo'だけでなく 'echo -e'をなぜ使うのだろうと思っています。何らかの理由? – phs

+0

'-e'フラグは、' \ n 'のようなバックスラッシュのエスケープ文字を解釈して改行を出力するようにechoに指示します。 – SiegeX

0

。デフォルトでは、spaceです。

[jaypal:~] while IFS=$'\n' read -a arry; do 
echo ${arry[0]}; 
done < <(echo -e "a b\nc\nd e") 
a b 
c 
d e 
[私はコマンド変数からのbashで配列を作成するにはどうすればよい?](の
+5

デフォルトでは '$' \ t \ n''で、スペースタブと改行。 – Cascabel

関連する問題