Bạn cần
#!/bin/ksh
func1()
{
print -- 4
}
[[ $(func1) = 4 ]] && print "function result = 4"
HOẶC
#!/bin/ksh
func1()
{
return 4
}
func1 ; [[ $? == 4 ]] && print "function result = 4"
Có một số vấn đề trong mã mà bạn trình bày, vì vậy hãy để tôi cố gắng giải thích (Bạn đang làm cho nó phức tạp hơn mức cần thiết).
Số 1 là việc bạn sử dụng các dấu kiểm trước để thay thế lệnh, những điều này đã không được chấp nhận bằng ngôn ngữ ksh kể từ ~ 1995! Sử dụng $ (... cmd) để thay thế cmd hiện đại. Chúng ta thường thấy các dấu gạch chéo được liệt kê như một cái gật đầu về tính di động, nhưng chỉ các kịch bản được viết cho các hệ thống mà vỏ Bourne là chỉ có vỏ yêu cầu sử dụng các dấu gạch chéo ngược. (À, tôi không biết về dấu gạch ngang hay tro, vì vậy có thể cả những thứ đó nữa).
Không 2. đó là $? được thiết lập sau khi bao giờ chức năng hoặc lệnh hoặc đường ống được thực hiện và là mã trả về của lệnh cuối cùng. Đó là một giá trị từ 0-255. Khi bạn có mã như cmd ; rc=$? ; echo $?
; bây giờ bạn đang lặp lại trạng thái của sự phân công của rc=$?
(mà hầu như luôn luôn là 0), và đó là lý do tại sao bạn sẽ thấy những người viết kinh nghiệm tiết kiệm giá trị của $? trước khi làm bất cứ điều gì khác với nó.
Nhớ lại rằng lệnh-thay sử dụng những gì đã từng là sản phẩm của các $(... cmd ...)
hoặc backtics lệnh kèm theo khi return
đặt giá trị của $?
(cho đến khi lệnh thực hiện rất cạnh resets giá trị đó).
Tôi hy vọng điều này sẽ hữu ích.
Giải thích tuyệt vời @shellter. +1 –
tnx @JaypalSingh; Trong thử nghiệm của tôi để viết câu trả lời của tôi, tôi cũng tình cờ gặp vấn đề rằng [[func1 = 4]] không nhận được giá trị trả về từ hàm. Bây giờ tôi nhận ra, như một bình luận đã bị xóa, rằng '[[...]]' sẽ chỉ đánh giá các giá trị văn bản, + so sánh ops + lệnh thay thế (có thể cả những người khác nữa), nhưng không có cách nào để trực tiếp thực hiện một func bên trong. – shellter
Yea, @ruakh chỉ ra rằng trong câu trả lời của tôi mà tôi đã xóa như tôi đã có tất cả sai. Nhưng bây giờ đọc câu trả lời của bạn và bình luận của mình, nó làm cho rất nhiều ý nghĩa hơn bây giờ. –