2017-05-10 9 views
2

のは、改行の同じ数を含むは、例えば、文字列を分離、私は二つの変数fooのバーを持っているとしましょうFOOをマージする最も簡単な方法は何ですかマージ改行は文字列を分離

$ echo $foo 
a 
b 
c 
$ echo $bar 
x 
y 
z 

bar以下の出力を得るには?

a x 
b y 
c z 

fooのバーは私がpaste -d ' ' foo barを行うことができ、ファイルでしたが、この場合には、それらは文字列である場合。

答えて

0

あなたは(POSIXに準拠していない)、これを行うためにBashのプロセス置換を使用することができます。

foo=$'a\nb\nc' 
bar=$'x\ny\nz' 
paste -d ' ' <(printf '%s\n' "$foo") <(printf '%s\n' "$bar") 

出力:

a x 
b y 
c z 

をSH-準拠した方法は少し複雑そうです:

foo=$'a\nb\nc' 
bar=$'x\ny\nz' 
res=$(while IFS=$'\n' read -u 3 -r f1 && IFS=$'\n' read -u 4 -r f2; do 
    printf '%s' "$f1" 
    printf ' %s\n' "$f2" 
done 3<<<"$foo" 4<<<"$bar" 
) 
+1

最後のスニペットの 'POSIX'準拠ワードを削除することができます。ANSI引用符付き文字列' $ '..' 'やhere-stリングは 'POSIX sh'シェルに準拠しています – Inian

+0

また、プロセス置換は、シェル特有のbourne-again特有の機能であり、' POSIX' bourne 'sh'シェル互換です。問題は、後者のシェルのためのものでした。 – Inian

+0

ありがとう@Inian - 答えを更新しました。 2番目の解決法は 'sh'で動作しました。 – codeforester

関連する問題