Pagina 1 di 1

[Risolto] Bash 4.4.0 - break, continue e loop funzioni

MessaggioInviato: 15/10/2016, 13:15
da gajm
Due banali script d'esempio:
Codice: Seleziona tutto
#!/bin/bash

while :; do
    read var
    if [ "$var" == "a" ]; then
        echo "$var"
    else
        break
    fi
done

Codice: Seleziona tutto
#!/bin/bash

main() {
    read var
    if [ "$var" == "a" ]; then
        echo "$var"
    else
        break
    fi
}

while :; do
    main
done

Fino all'arrivo di bash 4.4.0 entrambi gli script funzionano senza errori. Il break, se non si immette "a", interrompe il ciclo.
Ma ora su Stretch il secondo script, in cui il loop si trova in una funzione, restituisce un:
Codice: Seleziona tutto
riga 8: break: significativo solo in un ciclo "for", "while" o "until"

Non sono riuscito a trovare nulla in rete. È cambiato qualcosa nelle funzioni? Posso ipotizzare che si tratti di un bug?

Re: Bash 4.4.0 - break, continue e loop funzioni

MessaggioInviato: 15/10/2016, 14:22
da s3v
Sì, era un bug che ora è stato corretto:
http://tiswww.case.edu/php/chet/bash/CHANGES
xx. Fixed a bug that could allow `break' or `continue' executed from shell
functions to affect loops running outside of the function.

Re: Bash 4.4.0 - break, continue e loop funzioni

MessaggioInviato: 15/10/2016, 14:56
da gajm
Grazie s3v.
Vedo che nel changelog il fix è indicato per queste versioni:
This document details the changes between this version, bash-4.4-alpha, and
the previous version, bash-4.3-release.

Direi che allora non è risolto. :(

EDIT: Girovagando sulla mailinglist mi sono imbattuto in questo:
http://lists.gnu.org/archive/html/bug-bash/2015-10/msg00036.html
Che mi fa presumere si tratti di un cambiamento intenzionale.

Anche se a malincuore, aggiungo il "risolto" al 3d.