1 votes

Variable à l'intérieur de la boucle while de bash n'a jamais changé

Pourquoi le code suivant affiche-t-il toujours "0" ?

#!/bin/bash

RETVAL=0
echo -e '1\n2' | while read number; do
    RETVAL=1
done

echo $RETVAL

3voto

nullDev Points 1778

La boucle while fait partie d'un pipeline et s'exécute donc dans un sous-shell. Les variables définies dans le sous-shell (RETVAL=1) n'affectent pas le shell parent (echo $RETVAL).

0voto

fartheraway Points 4886

Il s'agit de la façon dont l'écho ne transmet pas de EOF / Ctrl D à la boucle while read.

Si vous retirez l'écho et saisissez un Ctrl D dans la boucle while, cela fonctionnera comme prévu.

Je ne suis pas sûr de comment envoyer un Ctrl D via un écho.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X