ฉันมีปัญหาแปลก ๆ กับทุบตีเมื่อเร็ว ๆ นี้ ในขณะที่พยายามทำให้สคริปต์ของฉันง่ายขึ้นฉันได้รับโค้ดเล็ก ๆ นี้:
$ 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ควรออกจากฟังก์ชั่นโดยไม่พิมพ์$?ใช่มั้ย ถ้าอย่างนั้นฉันจะตรวจสอบว่าฉันสามารถกลับจากท่อเพียงอย่างเดียว:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
สิ่งเดียวกันนี้เกิดขึ้นโดยไม่มีการwhileวนซ้ำ:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
มีบางอย่างที่ฉันหายไปที่นี่หรือไม่? การค้นหาของ Google ไม่ได้สนใจอะไรเลย! เวอร์ชั่นทุบตีของฉันคือ4.2.37 (1) - ปล่อยให้ Debian Wheezy
whileไม่ต้องการทำซ้ำ มันเบี่ยงเบนจากจุด
while returnตัวอย่างที่สองตรงไปตรงกว่าจุด แต่มันเป็นสิ่งที่ฉันไม่เชื่อว่าใครจะเคยใช้ ...