• # Autres pistes

    Posté par (site web personnel) . En réponse au message Utiliser une concaténation de variable dans FOR. Évalué à 5.

    Plusieurs ont indiqué eval comme dans

    for x in Lib Sat
    do for y in seq 7
     eval ${x}${y}=0
    done
    done
    

    ce qui est une bonne piste de départ. Défaut important, c'est très lent, et quand je dis lent, c'est que pour peu que ta boucle soit un peu longuette, c'est lent de façon très visible. Voici donc quelques pistes pour tâcher de gagner en vitesse.

    Tu peux par exemple grouper les affectations, en faisant par exemple:

    prepare_init()
    {
     local x y
     for x in Lib Sat
     do for y in seq 7
     printf '%s%s=0\n' "${x}" "${y}"
     done
     done
    }
    eval $(prepare_init)
    

    Oui bien

    prepare_init()
    {
     local x y
     for x in Lib Sat
     do for y in seq 7
     printf '%s%s=0\n' "${x}" "${y}"
     done
     done
    }
    perform_init()
    {
     local external
     external=$(mktemp perform_init.XXXXXX)
     prepare_init > "${external}"
     . "${external}"
     rm "${external}"
    }
    perform_init
    

    Je ne sais pas ce que tu fais exactement, mais en général faire ce genre de choses en shell signale qu'on se trompe un peu de langage. Le shell sert à lancer des programmes, déplacer des fichiers, etc. et traiter les données c'est le travail des programmes, pas du shell qui sert essentiellement à créer la glue entre ces programmes. (C'est mon avis et je le partage — tout le monde n'est pas d'accord.)