2017-05-10 7 views
2

Sagen wir, ich habe zwei Variablen foo und bar die gleiche Anzahl von Newline enthält Zeichenketten getrennt, zum BeispielMerging Newline getrennt Strings

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

Was ist der einfachste Weg ist foo zu fusionieren und bar um die Ausgabe unten zu bekommen?

a x 
b y 
c z 

Wenn foo und bar Dateien waren konnte ich paste -d ' ' foo bar tun, aber in diesem Fall sind sie Strings.

Antwort

0

Sie können Prozess-Substitution in Bash, dies zu tun (nicht konform POSIX):

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

Ausgänge:

a x 
b y 
c z 

eine SH-kompatible Art und Weise scheint ein wenig verworren:

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

Sie könnten das 'POSIX'-Kompatibilitätswort für das letzte Snippet entfernen, da weder die ANSI-Zeichenfolgen $ '.. noch' here-st Ringe sind 'POSIX sh' shell compliant – Inian

+0

Auch Prozesssubstitution ist auch bourne-wieder Shell-spezifische Funktion und _not_' POSIX' bourne 'sh' shell kompatibel. Die Frage war für die letztere Schale gedacht. – Inian

+0

Danke @Inian - aktualisiert die Antwort. Die zweite Lösung hat mit 'sh' funktioniert. – codeforester

Verwandte Themen