私は最近bashでいくつかの奇妙な問題を抱えています。スクリプトを簡素化しようとしている間に、この小さなコードを思いつきました。
$ 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検索ではこれについて何ももたらされませんでした!私のbashバージョンは、Debian Wheezy上の4.2.37(1)-releaseです。
while
複製に必要ない場合は、最初の2つの例を削除しないのはなぜですか?それはポイントから気をそらします。
while
ループは、を持つパイプの非常に一般的な使用法ですreturn
。第二の例は、ポイントをよりストレートですが、それは私が誰もが今まで使用するとは思わない何か...である