Forum Linux.général [Scripting] Pb avec read et découpage de mots

Posté par  .
Étiquettes : aucune
0
9
juin
2004
Voilà,
J'ai ceci :

#!/bin/zsh
IFS="|"
echo "1|2|3" | read UN DEUX TROIS
echo $UN $DEUX $TROIS

cela ne fonctionne pas, il ne fait aucune affectation, les variables sont vides.
En revanche, si je tape ces commandes dans la console, ça passe.
J'ai aussi testé :

#!/bin/zsh
IFS="|"
echo "1|2|3" > param
read UN DEUX TROIS < param
echo $UN $DEUX $TROIS

et ça marche.
Bien sûr il n'y a aucun intérêt de passer par un fichier.

Quelqu'un a la solution ?
  • # Solution

    Posté par  . Évalué à 2.

    Sous Bash ceci fonctionne:
    read UN DEUX TROIS < <(echo 1 2 3)
    echo $UN
    1
    echo $DEUX
    2
    echo $TROIS
    3
  • # Explication

    Posté par  . Évalué à 3.

    Le problème vient du fait que le pipe crée un sous-process. Les variables sont bien initialisées mais uniquement dans le sous-process 'read'.
    Dans la solution on utilise une syntaxe propre au bash qui permet de substituer la résultat d'une commande à un pipe nommé.
    • [^] # Re: Solution + Explication

      Posté par  . Évalué à 1.

      Merci beaucoup !
      J'avais le même problème avec bash, alors que je suis plus habitué à ksh
      (où la syntaxe avec pipe fonctionne) et je ne comprenais pas pourquoi...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.