मैं कुछ अजीब समस्याओं के साथ हाल ही में कर रहा हूँ। अपनी स्क्रिप्ट को सरल बनाने की कोशिश करते हुए, मैं इस छोटे से कोड के साथ आया:
$ 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 खोज इस बारे में कुछ नहीं लाया! मेरा बैश संस्करण ४.२.३ Whe (१) है-डेबियन व्हीज़ी पर।
whileप्रजनन की आवश्यकता नहीं है? यह बिंदु से विचलित करता है।
whileपाश एक पाइप के साथ एक बहुत ही सामान्य उपयोग है return। दूसरा उदाहरण इस बिंदु पर अधिक सीधे है, लेकिन यह ऐसा कुछ है जो मुझे विश्वास नहीं है कि कोई भी कभी भी उपयोग करेगा ...