2013-08-26 12 views
8

Mam dwie zmienne, wieloliniowe.jak połączyć dwie zmienne kolumny po kolumnie w bash

VAR1="1 
2 
3 
4" 

VAR2="ao 
ad 
af 
ae" 

Chcę dostać

VAR3="1ao 
2ad 
3af 
4ae" 

wiem, że mogę to zrobić przez:

echo "$VAR1" > /tmp/order 
echo "$VAR2" | paste /tmp/order - 

Ale czy jest jakiś sposób to zrobić bez pliku tymczasowego?

Odpowiedz

17

paste <(echo "$VAR1") <(echo "$VAR2") --delimiters ''

+0

co jest <(operator) nazywa? –

+1

@KurtisNusbaum "<()" jest nazywany "podstawieniem procesu". Nie wszystkie powłoki go obsługują, ale najpopularniejsze: https://www.google.com/search?q=process+ubstitution –

2

Można powiedzieć:

$ VAR3=$(paste <(echo "$VAR1") <(echo "$VAR2")) 
$ echo "$VAR3" 
1 ao 
2 ad 
3 af 
4 ae 

Nie jest jasne, czy chcesz spacje w wynikowej tabeli, czy też nie. Twój przykład: , który działa, będzie zawierać spacje, jak w powyższym przypadku.

Jeśli nie chcesz przestrzenie, tj 1ao zamiast 1 ao, to można powiedzieć:

$ VAR3=$(paste <(echo "$VAR1") <(echo "$VAR2") -d '') 
$ echo "$VAR3" 
1ao 
2ad 
3af 
4ae 
+0

Jaki jest sens posiadania dwóch identycznych odpowiedzi? –