J'essayais de comprendre comment "tout en lisage" fonctionne dans Bash, et je suis arrivé à accrocher un comportement que je ne peux pas expliquer: Ça fonctionne bien avec "tout en lisant": P> root@antec:/# var=old_value
root@antec:/# echo "new_value" | while read var; do echo $var; done
new_value
root@antec:/#
4 Réponses :
Je crois que c'est un problème de priorité, avec | avoir une priorité plus élevée que &&. Tout d'abord est regroupé comme suit:
Je n'aurais jamais pensé à ça! Merci
Pourquoi pensez-vous que cela fonctionne dans le deuxième cas? Il ne met pas vraiment à jour Explication: tout ce qui vient après var code>. faire echo $ var code> après la ligne avec pendant code> et voir. p>
| code> est exécuté dans un sous-groupe qui a sa propre copie de var code>. L'original var code> n'est pas affecté dans les deux cas. Ce qui est écho dépend de la question de savoir si echo code> est appelé dans le même sous-compartiment que lue code> ou non. P>
Le problème est de ne pas mettre à jour var code> dans la coque principale ou non, peut-être que je n'étais pas clair dans la question. J'étais intéressé par ce qui est écho, comme vous parlez de votre dernière phrase :)
Vous n'avez pas besoin de pendant code> boucle:
Je ne voulais pas imprimer la variable immédiatement, mais l'utiliser plus tard et que cela fonctionne:
var=old_value tmp=$(echo "new_value") read var <<<"$tmp" echo $var > new_value