web-dev-qa-db-fra.com

Exporter une variable de l'intérieur Une fonction est égale à l'exportation mondiale de cette variable?

J'utilise Ubuntu 16.04 avec l'indigène bash dessus.

Je ne suis pas sûr de s'exécuter

#!/bin/bash
myFunc() {
    export myVar="myVal"
}
myFunc

égale en tout sens, à juste exécuter export myVar="myVal".

Bien entendu, une variable globale devrait généralement être déclarée en dehors d'une fonction (une question de convention que je suppose, même si elle est techniquement possible) mais je m'interroge sur les cas plus exotiques où l'on écrit une fonction très générale et veut une variable à l'intérieur de celui-ci. toujours être disponible pour tout, n'importe où.

export d'une variable à l'intérieur d'une fonction, être identique à l'exporter dans le monde entier, directement dans la CLI, la rendant à la disposition de tout dans la coquille (tous les sous-vases et fonctions en eux)?

10
user9303970

Votre script crée une variable d'environnement myVar, dans l'environnement du script. Le script, comme il est actuellement présenté, est fonctionnellement exactement équivalent à

#!/bin/bash

export myVar="myVal"

Le fait que le export arrive dans l'organisme de fonction ne concerne pas la portée de la variable d'environnement (dans ce cas). Il commencera à exister dès que la fonction est appelée.

La variable sera disponible dans l'environnement du script et dans l'environnement de tout autre processus démarré à partir du script après l'appel de la fonction.

La variable n'existera pas dans l'environnement du processus parent (le shell interactif que vous exécutez le script à partir de), à ​​moins que le script ne soit recherché (avec . ou source) auquel cas l'ensemble du script s'exécutera dans l'environnement de la coque interactive (qui est le but de "sourcing" un fichier shell).

Sans la fonction s'appelle lui-même:

myFunc() {
    export myVar="myVal"
}

Sourcing Ce fichier placerait myFunc dans l'environnement de la coque d'appel. L'appel de la fonction créerait alors la variable d'environnement.

Voir aussi la question Quels scopes peuvent avoir des variables shell?

14
Kusalananda