Forum Programmation.shell Dialecte inconnu

Posté par .
Tags : aucun
1
9
mai
2009
Je suis depuis quelques temps à la recherche de l'explication d'une étrangeté que je trouve dans certains scripts. Par exemple dans /etc/init.d/mdadm

Au lieu d'utiliser $1 ou ${1}, les script contient ${1:-}

La seule explication que je connaise est que ${1:x} permet d'extraire le contenu de ${1} à partir du x-ième caractère. Mais '-' n'est pas un nombre.

Une idée sur ce que fais cette chose ?
  • # man bash

    Posté par (page perso) . Évalué à 9.

    ${parameter:-word}
                  Use Default Values.  If parameter is unset  or  null,  the
                  expansion of word is substituted.  Otherwise, the value of
                  parameter is substituted.
    

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

    • [^] # Re: man bash

      Posté par . Évalué à 3.

      Tout simplement :-)
      Je n'ai pas trouvé ça dans ma bible "Advanced Bash Scripting". Je viens de tester, effectivement:
      # echo "${TOTO:-123}"
      123

      Je ne comprends par contre pas l'intérêt de mettre ${TOTO:-} car ça donne la même chose que ${TOTO} non ?

      # echo "${TOTO:-}"
      rien ne s'affiche lorsque TOTO n'est pas défini.
      # echo "${TOTO}"
      rien ne s'affiche lorsque TOTO n'est pas défini.
      • [^] # Re: man bash

        Posté par . Évalué à 0.

        Et pourtant, il y a tout une page qui fait réference à ce genre de truc :

        http://tldp.org/LDP/abs/html/refcards.html#AEN21717
      • [^] # Re: man bash

        Posté par . Évalué à 2.

        un simple habitude du developpeur que de toujours utiliser la version complete plutot que de vouloir economiser 2 caracteres

        ainsi tu sais toujours ce que fait ton appel
        et si demain tu veux le remplacer, c'est peut-etre aussi plus facile à maintenir
      • [^] # Re: man bash

        Posté par . Évalué à 10.

        En en-tête du script il y a un
        set -eu

        d'après man bash
        -u Treat unset variables as an error when performing parameter expansion. If
        expansion is attempted on an unset variable, the shell prints an error message,
        and, if not interactive, exits with a non-zero status.


        du coup
        $ bash
        $ set -eu
        $ echo ${FOO:-}

        $ echo ${FOO}
        bash: FOO: unbound variable
        $ echo $?
        1
        • [^] # Re: man bash

          Posté par (page perso) . Évalué à 4.

          Effectivement, ça prends tout son sens: ${1:-} permet de ne pas planter si $1 n'existe pas.
          A ne pas utiliser pour les variables internes, car ça masquerait les certains bugs.

Suivre le flux des commentaires

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