GNU/Linux >> Tutoriels Linux >  >> Linux

Fonctions dans les variables shell ?

Je lis ce post sur l'utilisation des fonctions dans les variables shell bash. J'observe que pour utiliser les fonctions du shell, il faut les exporter et les exécuter dans un shell enfant comme suit :

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function

Je veux demander s'il est possible de définir des fonctions dans des variables shell bash de sorte qu'elles puissent être exécutées dans le shell actuel sans utiliser l'exportation et l'exécution d'un nouveau shell ?

Réponse acceptée :

Non, vous ne pouvez pas.

Si vous souhaitez utiliser une fonction dans le shell actuel, définissez-la simplement puis utilisez-la plus tard :

$ foo() { echo "Inside function"; }
$ foo
Inside function

Avant le jour de Shellshock, vous pouvez stocker une fonction dans une variable, exporter une variable et utiliser une fonction dans un sous-shell, car bash prend en charge la fonction d'exportation, bash mettra la définition de la fonction dans une variable d'environnement comme :

foo=() {
  echo "Inside function"
}

puis interprétez la fonction en remplaçant = avec de l'espace. Il n'y a aucune intention de mettre la fonction dans la variable et de se référer à la variable pour exécuter la fonction.

Maintenant, après que Stéphane Chazelas ait trouvé le bogue, cette fonctionnalité a été supprimée, plus aucune définition de fonction n'est stockée dans une variable d'environnement simple. Désormais, les fonctions exportées seront encodées en ajoutant le préfixe BASH_FUNC_ et le suffixe %% pour éviter les conflits avec les variables d'environnement. bash L'interpréteur peut désormais déterminer s'il s'agit ou non d'une fonction shell, quel que soit le contenu des variables. Vous devez également définir la fonction et l'exporter explicitement pour l'utiliser en sous-shell :

$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function

Quoi qu'il en soit, si votre exemple a fonctionné avec votre bash actuel , alors vous utilisez une version vulnérable.


Linux
  1. Personnalisation du shell Bash

  2. Quels sont les paramètres/variables spéciaux du shell (bash) ?

  3. Script Shell avec fonction et paramètre comme variables ?

  4. Comment créer et appeler des fonctions dans Bash

  5. Obtenir une liste de noms de fonctions dans un script shell

.bashrc contre .bash_profile

Shell Scripting Partie V :Fonctions dans Bash

Bash Scripting - Fonctions expliquées avec des exemples

Bash Beginner Series #2 :Comprendre les variables dans les scripts shell Bash

Bash Scripting Part6 - Créer et utiliser des fonctions Bash

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques