IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Du bon emploi des accolades lors du "développement des variables"


Sujet :

Shell et commandes GNU

  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut Du bon emploi des accolades lors du "développement des variables"
    qui est le couillon qui vous enseigne l'emploi systématique des accolades lors du Développement de paramètres ?
    ${variable} -> $variable.

    c'est comme utiliser l'écriture inclusive lorsque le genre de l'objet décrit·e n'est pas ambigu·e.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Mouais, ici c'est dur de dire ça, car c'est cohérent, tout le code est implémenté de la sorte...

    Je serais d'accord avec toi si c'était fait au doigt mouillé.

    Et dans certaines conditions, comme du parsing depuis d'autres langages, ça simplifie énormément la chose.
    Cordialement.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    "au doigt mouillé", ou systématiquement, si ça n'a pas d'utilité (concaténation, remplacement...), c'est i nu ti le (#tautologie ); et, évidemment, si c'est inutile, il n'y a pas lieu de s'en servir.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Je serais d'accord de son inutilité lorsque cela sera cohérent, c'est à dire quand on pourra écrire $array[n] sans être obligé d'écrire ${array[n]} parce que là, pour le coup, ça fait du non abouti...
    Cordialement.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    c'est tout à fait cohérent : ça participe du Remplacement des paramètres.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Non, car les [] n'entre pas dans le nommage d'une variable, donc le shell pourrait avoir la facilité d'écriture sans les accolades.
    Et on pourrait ainsi avoir la forme: ${!var}[n] en plus de la forme ${!var[n]}

    En plus, je ne prends pas position sur le fait d'encadrer ou non une variable, je prends position sur le fait d'être cohérent tout du long, que cela soit une bêtise ou pas
    Cordialement.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    donc, on pourrait écrire des ... tout au long d'une thèse et obtenir son doctorat, parce que l'ensemble est cohérent ?

    je ne vois pas de différence entre la référence à un élément d'un tableau (entre[] : ${tableau[indice]}) et la référence à un certain nombres de caractères depuis un nombre de caractères donné (entre :: : ${var:début:longueur}).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    donc, on pourrait écrire des ... tout au long d'une thèse et obtenir son doctorat, parce que l'ensemble est cohérent ?
    Il y a tout de même une différence d'écrire sa thèse tout en majuscule et écrire des ... tout du long (en plus, sans être méchant, je pense que pour le coup, dans la thèse on trouvera plus facilement ${var} que $var).

    Citation Envoyé par N_BaH Voir le message
    je ne vois pas de différence entre la référence à un élément d'un tableau (entre[] : ${tableau[indice]}) et la référence à un certain nombres de caractères depuis un nombre de caractères donné (entre :: : ${var:début:longueur}).
    Je ne vois pas trop le rapport, à part si tu veux dire que les tableaux deviennent inutiles () .Sinon, la différence, c'est que dans un cas on ne calcul pas la position de l'indice.
    Cordialement.

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    dans la thèse on trouvera plus facilement ${var} que $var
    au XIXè siècle, peut-être. Maintenant, l'impression à fait suffisamment de progrès pour qu'on puisse distinguer typographiquement le texte et le code.
    Je ne vois pas trop le rapport
    les [] n'entre pas dans le nommage d'une variable
    les : n'entrent pas non plus dans le nommage de la variable.
    mais c'est valable pour tous les caractères qui indiquent une modification lors du Remplacement des paramètres.
    j'ai pris les :, pour l'exemple, parce qu'ils permettent de sélectionner une partie d'une variable, comme un indice permet d'indiquer une partie d'un tableau.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Donc, pour une thèse, on peut l'écrire toute en majuscule, moi ça me va.

    Concernant le ${var[n]} et le ${var:x:y}, la différence est que dans un cas on est sur un type de variable qui est un tableau dans l'autre, le :: ne dit rien du type.

    D'ailleurs un exemple qui montre bien que le tableau n'est pas traité au même niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ foo=(titi tutu toto)
    $ echo ${foo[*]:0:1}
    titi
    $ echo ${foo[*]:0:2}
    titi tutu
    $ echo ${foo[*]:0:3}
    titi tutu toto
    $ echo ${foo[*]:1:3}
    tutu toto
    Cordialement.

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    ça ne change rien, ce sont des variables; de "type" différent, mais des variables, dont les Remplacements sont décrits au même endroit dans le man.
    les tableaux requièrent les accolades pour être développées correctement, alors que pour les variables les accolades sont inutiles par défaut.

    <légère mauvaise foi>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ tablo=( abc def ghi )
    $ echo ${tablo:1:1}
    b
    </légère mauvaise foi>

    sans indice, un tableau affiche son premier élément.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    C'est justement ce que je reproche: que les tableaux requièrent des accolades pour être développés alors que l'on devrait pouvoir s'en passer.

    Surtout qu'il sait faire la différence quand on voit qu'il sait construire foo[1]=bar.

    Pour la variable simple, je te concède que je ne mets les accolades que quand c'est obligatoire ou quand je sais que cela sera utile pour d'autres critères, comme par exemple un besoin de parsing depuis un autre langage.
    Cordialement.

  13. #13
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    besoin de parsing depuis un autre langage.


    tu peux nous montrer un exemple, stp ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    J'ai des fichiers de conf tout simple en format compréhensible par le shell, donc juste à sourcer quand je suis en shell, par contre j'ai des fois besoin d'utiliser ces fichiers de conf dans un langage comme python, perl, C,...

    Et comme ces fichiers ne sont pas préalablement sourcé avant, le besoin dans ces différents langages c'est de pouvoir développer les variables qui utilise d'autres variables, et donc, pour simplifier le parsing depuis ces autres langage, on a mis en place la règle que dans ces fichiers de configuration, les variables doivent être dans le format ${VAR}.

    PS: ce n'est pas la seule règle que l'on a déterminé pour nos fichiers de configuration, mais elle en fait partie (et uniquement pour nos fichiers de configurations).
    Cordialement.

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    oui, mais là, c'est votre cuisine; ce n'est pas lié à l'emploi des variables ±directement dans le shell.
    vous pourriez utiliser une autre convention, non ?
    par exemple :
    Code fichier de conf : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bla bla |sh uneVar| bla bla
    tralala |sh autreVar| tralala
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Oui, mais on ne peut pas non plus rejeter cette forme d'écriture dans un script, elle existe, et je ne pense pas que si on doit décider un jour laquelle des deux doit perdurer, ce soit celle sans accolade qui gagnera:
    la forme avec accolade prête moins à confusion que la forme sans accolade (et comme en plus, on a tendance à choisir le pire des 2 maux )
    Cordialement.

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    je peux imaginer, mais ça n'arrivera pas. Ce serait d'un lourdingue !

    aujourd'hui, mettre des accolades tout le temps dans un shell, c'est faire du vélo avec des stabilisateurs*.

    --
    * des petites roues.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut, je n'ai pas vos niveaux mais j'utilise quasiment toujours des accolades afin d'avoir un style cohérent.

    Et ça évite de passer à côté d'erreur toute bête, genre il manque un espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "$Nompense que..."
    echo "${Nom}pense que..."
    Je trouve que c'est une habitude visuelle car des qu'on veut développer les variables (que ce soit pour les tableaux ou // ,, /?...), il faut les {}, donc je les mets par défaut.

    Et niveau temps d’exécution avec une boucle de 100 000 tours :
    $x = 2.600s
    ${x} = 2.800s
    On peut pas vraiment ire que ça a un impacte sur la charge de travail.

    C'est une considération visuelle, au même titre que de sauter des lignes, de laisser plus d'espace, de mettre des tabulations...
    Car c'est inutile niveau code mais pas niveau visuel.

    Peut-être inutile mais sans conséquence alors que ça me plaît lorsque je lis le code, du coup je le fais :p

    Mais tu as raison, je vais lancer une pétition pour obliger l'utilisation obligatoire des accolades pour que ma façon de faire devienne la norme
    Sous Kubuntu 20.04

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 377
    Points
    19 377
    Par défaut
    si ça ne sert pas, je ne m'en sers pas. je l'ai déjà dit ?
    par contre, si c'est utile (remplacements, concaténation...), ça attire l'œil sur un comportement "inhabituel".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/12/2007, 18h43
  2. [.NET]Méthodologie et emploi des class
    Par mikyfpc dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 19/12/2006, 17h37
  3. Quel est le bon usage des fichiers "*.bpk" ?!
    Par bnadem35 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 17h31
  4. Réponses: 2
    Dernier message: 03/09/2006, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo