Forum Programmation.shell assigner des valeurs chaînes à un tableau via le résultat d'une commande

Posté par  .
Étiquettes : aucune
0
8
avr.
2010
Voici un bout de code shell

#!/bin/bash

VAR=("A B C" "D E F")
echo ${VAR[0]}

VAR=($(echo -e \"A B C\" \"D E F\"))
echo ${VAR[0]}
exit


produit :

A B C
"A


Je veux assigner à un tableau le résultat d'une fonction. Sauf que les éléments peuvent contenir des espaces, aussi j'essaie d'entourer chacun des éléments par des guillemets. Cela fonctionne en assignement direct, mais pas quand ça passe par une commande. Je voudrais réussir à utiliser les guillemets dans la commande "echo" pour pouvoir obtenir une assignation correcte de mon tableau.
  • # echo qui interprete les espaces

    Posté par  . Évalué à 2.

    il faut extraire ou proteger les espaces dans "A B C"

    si tu remplaces pas
    echo -e "ABC" "DEF" tu verras que ca marche bien
  • # IFS

    Posté par  . Évalué à 3.

    Je ne suis pas sûr que ce que tu essaies de faire soit possible en ayant des espaces dans tes datas alors que l'espace est le caractère séparateur ... en tout, pour l'instant, je ne vois pas comment écrire ça suivant ton approche initiale.

    Si tu contrôle le script qui génère ce que tu veux mettre dans ton tableau, tu peux jouer sur l'impôt sur la fort^w^w^w^w Input Field Separator :


    $ export IFS="-"
    $ VAR=($(echo A B C-D E F))
    $ echo ${VAR[0]}
    A B C


    une autre méthode forcément moins satisfaisante, est de faire l'affectation des VAR[i] dans une boucle.
    • [^] # Re: IFS

      Posté par  . Évalué à 2.

      ah mince, j'ai fait une vanne pourrie pour dyslexiques ...
      --> []

Suivre le flux des commentaires

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