Son zamanlarda bash ile garip sorunlar yaşıyorum. Senaryomu basitleştirmeye çalışırken, bu küçük kod parçasını buldum:
$ 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
yazdırmadan işlevden çıkmış $?
olmalı, değil mi? Peki, o zaman tek başına bir borudan dönüp dönemeyeceğimi kontrol ettim:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Aynı şey bir while
döngü olmadan gerçekleşir :
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Burada özlediğim bir şey var mı? Bir Google araması bu konuda hiçbir şey getirmedi! Benim bash versiyonum Debian Wheezy'de 4.2.37 (1) .
while
Üreme için gerekli değilse neden ilk iki örneği kaldırmıyorsunuz ? Bu noktadan oyalanıyor.
while
döngü, bir boru için çok yaygın bir kullanımdır return
. İkinci örnek daha doğrudur, ama kimsenin kullanacağına inanmadığım bir şey ...