Tôi có một mã như thế này:xuất khẩu không làm việc (từ một chức năng gọi là để có được tiếng vang của nó)
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
echo "some output"
}
final_output="the otput is $(test_this)"
echo "$ABC"
Thật không may là biến ABC
không được thiết lập.
Tôi phải gọi test_this
như vậy, vì trong chương trình thực sự của tôi, tôi thực hiện một số đối số, nó thực hiện các thao tác phức tạp khác nhau, gọi các chức năng khác nhau, trên đường xuất dữ liệu này (dựa trên các đối số đó), và ở cuối một số chuỗi đầu ra được lắp ráp để được trả về. Gọi nó hai lần, một lần để có được xuất khẩu và một lần cho chuỗi đầu ra sẽ là xấu.
Câu hỏi đặt ra là: tôi có thể làm gì để có cả xuất và chuỗi đầu ra tại chỗ, nhưng chỉ bằng một cuộc gọi đến một hàm như vậy?
Câu trả lời rằng tôi hài lòng với (cảm ơn bạn paxdiablo):
#!/usr/bin/env bash
test_this(){
export ABC="ABC"
export A_VERY_OBSCURE_NAME="some output"
}
test_this
final_output="the otput is $A_VERY_OBSCURE_NAME"
echo "$ABC" #works!
unset A_VERY_OBSCURE_NAME
Cảm ơn thông tin chi tiết này, nhưng nó không giúp tôi. Có cách nào tôi có thể gọi hoặc thay đổi chức năng này, để tôi thực sự có thể xuất khẩu ra ngoài không ?. – robert
@robert: xem cập nhật. Vấn đề thực sự của bạn là '$()' nhất thiết tạo ra một tiến trình con để bất kỳ thay đổi môi trường nào sẽ bị giới hạn trong tiến trình con đó. Thay vào đó, nếu bạn gọi hàm trực tiếp, bạn có thể ảnh hưởng đến môi trường quy trình hiện tại. – paxdiablo
Cảm ơn bạn, tôi đã đi với tùy chọn thứ hai, thêm vào cuối: unset OUTPUT. – robert