2012-03-01 36 views
5

Tôi có một tập lệnh Python xuất ra hai số như sau: 1.0 2.0 (đó là khoảng cách giữa các số, nhưng nó có thể là \t hoặc bất kỳ thứ gì. Tôi muốn biến bash để lưu 1.0, và một biến khác để lưu các 2.0 đây có phải là có thểGiá trị "Piping" vào biến Bash

Trong quá khứ, tôi đã chỉ "đường ống" một giá trị vào một biến như sau:.?

var=`python file.py` ; 

nhưng bây giờ, tôi quan tâm đến việc lưu hai giá trị từ tệp python. Khái niệm tương tự như:

var1,var2=`python file.py` ; 

Bất kỳ lời khuyên/trợ giúp nào?

Cảm ơn!

Trả lời

7

Bạn có thể sử dụng một cái gì đó như thế này:

read var1 var2 < <(python file.py) 

Cú pháp sôi nổi <() được gọi thay thế tiến trình.

+0

Điều này tốt hơn rất nhiều so với những điều vô nghĩa của tôi dưới đây. – zmccord

+0

@Mat: Hoạt động tuyệt vời. Cảm ơn! – Amit

1

Các one-liner tôi sử dụng cho các lĩnh vực tách là

... | awk '{print $1}' | ... # or $2, $3, etc. 

vì vậy bạn có thể làm

var = `foo` 
var1 = `echo "$var" | awk '{print $1}'` 
var2 = `echo "$var" | awk '{print $2}'` 

chỉnh sửa: thêm dấu ngoặc kép quanh $ var

1

Tôi đoán hiệu quả nhất và thanh lịch điều ở đây sẽ là sử dụng readarray để đọc giá trị vào một mảng. Đó là nếu bạn không sao với việc sử dụng các mảng, tất nhiên. Bạn nên, nhưng bạn không bao giờ biết. Điều này sẽ yêu cầu dấu phân cách là một dòng mới, mặc dù. Nhưng dù sao:

readarray -t values < <(python file.py)

sẽ giúp bạn có một mảng của một yếu tố cho mỗi đầu ra dòng bởi python file.py với ký tự dòng mới gỡ bỏ. Hãy xem man bash để biết các tùy chọn khác cho nội trang dựng sẵn rất thú vị này.

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