Besoin d'aide script bash

Bonjour, j'ai un problème avec mon script :/

je déclare un array comme ceci :

declare -a start=('str1' 'vbr1' 'tri')

Et un peu plus loin il y a un read -r input, je voudrais savoir comment faire pour vérifier que ce qui a été saisi par l'utilisateur dans $input est contenu dans l'array start.
Cette condition marche bien : if [[ " ${start[@]} " =~ " ${input} " ]]; then
mais seulement si ce que l'utilisateur entre est identique à un des termes de l'array, or j'aimerais pouvoir ecrire "str1 rep" ou encore "tri mr" et qu'il considère quand même qu'une partie de $input se trouve dans l'array start...

je sais pas si j'ai été clair, excusez moi si jamais :)
Merci d'avance !

6 réponses

  1. Modérateur
    Tu peux extraire le premier mot en t'inspira de ceci:
    johand@bata:~$ aString="abc def ghi"
    johand@bata:~$ echo ${aString%% *}
    abc

    L'avantage de cette méthode est d'utiliser les commandes internes de bash et de ne lancer aucun processus externe
    1. Contributeur
      Salut,

      $ cat foo.sh 
      #! /bin/bash

      declare -a start=('str1' 'vbr1' 'tri')

      PREG="${start[@]}"
      REG="${PREG// /|}"

      while :
      do
      read -rp "Entrez un nom : " input

      if [[ ${input} =~ ${REG} ]]
      then
      echo "Entrée existante"
      else
      echo "L'entrée n'existe pas"
      fi
      done


      $ ./foo.sh
      Entrez un nom : str1
      Entrée existante
      Entrez un nom : str1 abc
      Entrée existante
      Entrez un nom : abc
      L'entrée n'existe pas
      Entrez un nom : abc vbr1
      Entrée existante
      Entrez un nom : triton
      Entrée existante

      1. Merci je vais essayer ça de suite !
        Jisiv merci, le problème c'est que parfois l'entrée peut venir en second mot ou même en troisième, l'ordre est aléatoire :/
        Je reviens pour dire si ça marche !
        1. Super ça marche impec !
          Merci zipe

          Je vais devoir faire ça sur beacoup d'array, j'essaye d'en faire une fonction mais ça ne marche pas.

          function check_array() {
          pv_$1="${"$1"[@]}"
          v_$1="${pv_$1// /|}"
          }

          check_array start

          ${"$1"[@]} : mauvaise substitution.

          Tu saurais pas comment faire ? :)
          1. Contributeur
            Indirection ;-))
        2. Arf ça marche pas (en même temps je découvre a peine :D)

          function check_array() {
          pv_$1="${!'"$1"'[@]}"
          v_$1="${pv_$1// /|}"
          }

          ${!'"$1"'[@]} : mauvaise substitution

          Vraiment a part donner l'array directement en argument je vois pas, et je sais pas comment faire.
          1. Contributeur
            Vraiment a part donner l'array directement en argument je vois pas
            Moi non plus ;-(

            function check_array() {
            PREG="${@}"
            REG="${PREG// /|}"
            }

            check_array ${start[@]}
        3. Merci c'est parfait (enfin ya des problèmes mais ça viens de mon code cette fois :))
          Me reste plus qu'à lire la doc pour comprendre comme fonctionne ce code !

          merci beaucoup !