Gần đây tôi có một số vấn đề kỳ lạ với bash. Trong khi cố gắng đơn giản hóa tập lệnh của mình, tôi đã nghĩ ra đoạn mã nhỏ này:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
return
Có nên thoát khỏi chức năng mà không in $?
, không nên? Chà, sau đó tôi đã kiểm tra xem tôi có thể trở về từ một mình không:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Điều tương tự xảy ra mà không có while
vòng lặp:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Có cái gì tôi đang thiếu ở đây? Một tìm kiếm Google không mang lại điều gì về điều này! Phiên bản bash của tôi là 4.2.37 (1) - phát hành trên Debian Wheezy.
while
không cần thiết cho việc sao chép? Nó phân tâm từ điểm.
while
vòng lặp là cách sử dụng rất phổ biến cho một đường ống với return
. Ví dụ thứ hai thì thẳng thắn hơn, nhưng đó là điều mà tôi không tin bất cứ ai sẽ sử dụng ...