J'ai eu des problèmes étranges avec bash ces derniers temps. En essayant de simplifier mon script, j'ai trouvé ce petit morceau de code:
$ 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
aurait dû quitter la fonction sans imprimer $?
, n'est-ce pas? Eh bien, j'ai vérifié si je pouvais revenir d'un tuyau seul:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
La même chose se produit sans while
boucle:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Y a-t-il quelque chose qui me manque ici? Une recherche Google n'a rien apporté à ce sujet! Ma version bash est la version 4.2.37 (1) sur Debian Wheezy.
while
n'est pas nécessaire pour la reproduction? Cela détourne l'attention du sujet.
while
boucle est une utilisation très courante pour un tuyau avec return
. Le deuxième exemple est plus direct, mais c'est quelque chose que je ne pense pas que quiconque utiliserait jamais ...