Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération arguments passé à un script avec n=1

    10 juin 2020 à 9:12:53

    Bonjour à tous,

    Je me posais une petite question, lorsque j'écris un script, si je lui donne un argument je peux le lire de la manière suivante

    echo $1

    Mais j'aimerais remplacer ce 1 par un "n" a qui je donnerai la valeur 1.

    J'ai essayé $$n, $`$n`, $($n), $`($n)`mais je ne trouve pas mon bonheur

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2020 à 9:48:52

      Bonjour,

      Tu peux le faire avec des expansions indirectes (cf. manuel de bash):

      • Le script :
      #!/usr/bin/env bash
      
      for ((i = 0; i <= 3; i++)); do
          echo ${!i};
      done
      
      • La sortie:
      $ ./dyn_arg_parse.sh a b c
      ./dyn_arg_parse.sh
      a
      b
      c


      Mais on peut se poser la question de l'utilité de faire comme ça. Si c'est pour parser les arguments passé, tu peux utiliser shift:

      #!/usr/bin/env bash
      
      while [ $# -gt 0 ]; do
          echo $1;
          shift
      done

      Plus propre, plus simple à lire.

      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2020 à 9:55:14

        Bonjour,

        J'ai un cours en haute-école (système belge) et j'ai un exo ou je peux recevoir un nombre infini d'argument, et je dois les additionner ensemble. Sachant qu'on n'a pas vu les tableaux.

        La première solution me parle plus avec ce que j'ai déjà vu comme matière en linux.

        Merci beaucoup !

        edit : encore une petite question, c'est possible de faire "unset $REPLY" ?

        -
        Edité par Wizounet 10 juin 2020 à 9:58:21

        • Partager sur Facebook
        • Partager sur Twitter
          10 juin 2020 à 10:07:20

          C'est à mon avis préférable d'utiliser shift justement, surtout si tu as un nombre infini d'argument, tu n'as pas besoin de leur garder une place en mémoire s'il ne servent à rien. Autant les retirer.

          Wizounet a écrit:

          edit : encore une petite question, c'est possible de faire "unset $REPLY"

          Essaies !

          La réponse est oui, bien sur on peut faire "unset REPLY", mais pour quoi faire?!!!

          -
          Edité par KoaTao 10 juin 2020 à 10:11:07

          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2020 à 10:08:25

            KoaTao a écrit:

            Wizounet a écrit:

            edit : encore une petite question, c'est possible de faire "unset $REPLY"

            Essaies !

            La réponse est oui, bien sur on peut faire "unset REPLY", mais pour quoi faire?!!!


            Pour un autre exercice je dois demander via un read deux variables mais au lieu de jouer sur le $REPLY je vais directement jouer sur une variable propre à ce que je veux.
            • Partager sur Facebook
            • Partager sur Twitter
              10 juin 2020 à 10:21:55

              Tu n'es pas obligé d'utiliser REPLY de toute manière avec read. Donc pourquoi utiliser unset ?

              $ read var[0] var[1]
              v0 v1
              $ echo ${var[@]}
              v0 v1 

              Il faut lire son cours/la doc de temps en temps.

              -
              Edité par KoaTao 10 juin 2020 à 10:22:47

              • Partager sur Facebook
              • Partager sur Twitter
                10 juin 2020 à 10:23:45

                KoaTao a écrit:

                Tu n'es pas obligé d'utiliser REPLY de toute manière avec read. Donc pourquoi utiliser unset ?

                $ read var[0] var[1]
                v0 v1
                $echo ${var[@]}
                v0 v1 

                Il faut lire son cours/la doc de temps en temps.

                -
                Edité par KoaTao il y a moins de 5s


                Oui je sais bien, mais j'ai juste pas réfléchi sur le coup.

                Enfin merci !

                edit : Je reviens la dessus, quand j'essaie de faire "man read" pourquoi ça ne fonctionne pas comme avec "man ls" par exemple ?

                -
                Edité par Wizounet 10 juin 2020 à 13:23:01

                • Partager sur Facebook
                • Partager sur Twitter
                  10 juin 2020 à 13:31:44

                  read n'est pas une commande du système, mais une commande de l’interpréteur: bash, zsh, fish, sh, etc. Il faut regarder le manuel qui correspond à l’interpréteur utilisé. Pour bash, il y a une commande d'aide intégrée: help read.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Récupération arguments passé à un script avec n=1

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown