2013-08-26 38 views
8

Tôi có hai biến, nhiều dòng.cách kết hợp hai cột từng cột trong bash

VAR1="1 
2 
3 
4" 

VAR2="ao 
ad 
af 
ae" 

Tôi muốn nhận

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

Tôi biết tôi có thể làm điều đó bằng cách:

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

Nhưng có cách nào để làm mà không có một tập tin tạm thời?

Trả lời

17

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

+0

các <() điều hành là những gì được gọi là? –

+1

@KurtisNusbaum "<()" được gọi là "quá trình thay thế". Không phải tất cả các trình bao đều hỗ trợ nó, nhưng hầu hết các hệ vỏ đều hỗ trợ: https://www.google.com/search?q=process+substitution –

2

Bạn có thể nói:

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

Nó không rõ ràng cho dù bạn muốn không gian trong mảng kết quả hay không. Ví dụ của bạn hoạt động sẽ chứa khoảng trắng như trong trường hợp trên.

Nếu bạn không muốn không gian, ví dụ: 1ao thay vì 1 ao, sau đó bạn có thể nói:

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

Điểm có 2 câu trả lời giống hệt nhau là gì? –

Các vấn đề liên quan