ฉันมีปัญหาแปลก ๆ กับทุบตีเมื่อเร็ว ๆ นี้ ในขณะที่พยายามทำให้สคริปต์ของฉันง่ายขึ้นฉันได้รับโค้ดเล็ก ๆ นี้:
$ 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
ตัวอย่างที่สองตรงไปตรงกว่าจุด แต่มันเป็นสิ่งที่ฉันไม่เชื่อว่าใครจะเคยใช้ ...