bash
chạy phía bên phải của một đường ống trong ngữ cảnh của lớp con , do đó, các thay đổi đối với các biến (đó là những gì read
không được bảo tồn) - chúng sẽ chết khi lớp con thực hiện, ở cuối lệnh.
Thay vào đó, bạn có thể sử dụng thay thế quá trình :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
Trong trường hợp này, read
đang chạy trong lớp vỏ chính của chúng ta và lệnh tạo đầu ra của chúng ta chạy trong lớp con. Các <(...)
cú pháp tạo ra một subshell và kết nối đầu ra của mình cho một đường ống, mà chúng tôi chuyển hướng vào đầu vào của read
với bình thường <
hoạt động . Bởi vì read
chạy trong shell chính của chúng tôi, các biến được đặt chính xác.
Như đã chỉ ra trong một nhận xét, nếu mục tiêu của bạn theo nghĩa đen là chia một chuỗi thành các biến bằng cách nào đó, bạn có thể sử dụng chuỗi ở đây :
read a b dump <<<"1 2 3 4 5"
Tôi cho rằng có nhiều thứ hơn thế, nhưng đây là một lựa chọn tốt hơn nếu không có.