Ultimamente ho avuto strani problemi con bash. Durante il tentativo di semplificare il mio script, ho trovato questo piccolo pezzo di codice:
$ 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
avrebbe dovuto uscire dalla funzione senza stampare $?
, no? Bene, quindi ho verificato se posso tornare da una pipa da solo:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
Lo stesso succede senza while
loop:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
C'è qualcosa che mi manca qui? Una ricerca su Google non ha apportato nulla al riguardo! La mia versione bash è 4.2.37 (1)-release su Debian Wheezy.
while
non sono necessari per la riproduzione? Distrae dal punto.
while
loop è un utilizzo molto comune per una pipe con return
. Il secondo esempio è più diretto al punto, ma è qualcosa che non credo che qualcuno avrebbe mai usato ...