요즘 배쉬에 이상한 문제가 있습니다. 스크립트를 단순화하려고 할 때이 작은 코드 조각을 생각해 냈습니다.
$ 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.
내가 여기서 놓친 것이 있습니까? 구글 검색은 이것에 대해 아무것도 가져 오지 않았다! 내 bash 버전은 Debian Wheezy의 4.2.37 (1) 릴리스 입니다.
while
재생산에 필요하지 않은 경우 처음 두 가지 예를 제거해보십시오 . 그것은 지점에서 산만 해집니다.
while
루프는로 파이프에 매우 일반적으로 사용됩니다 return
. 두 번째 예는 요점에 더 직설적이지만, 아무도 사용하지 않을 것이라고 생각합니다 ...