2011-04-26 2 views

Répondre

11

declare -x FOO est la même que export FOO. Il "exporte" la variable FOO en tant que variable d'environnement, de sorte que les programmes que vous exécutez à partir de cette session shell le voient.

+0

Je ne pense pas qu'ils soient des synonymes exacts. –

+0

Non? Alors pourquoi est-ce que quand vous lancez 'export' (sans arguments), il imprime les exportations en cours en utilisant' declare -x'? –

+0

Je ne suis pas sûr, mais voir [cette question] (http://stackoverflow.com/q/7506644/834176). Je l'ai essayé et ils agissent différemment. –

5

Déclare -x peut être utilisé à la place d'eval pour permettre de définir des variables en tant qu'arguments du shell. Par exemple, vous pouvez remplacer le très précaire:

 
# THIS IS NOT SAFE 
while test $# -gt 0; do 
    eval export $1 
    shift 
done 

avec le plus sûr:

 
while test $# -gt 0; do 
    declare -x $1 
    shift 
done 

En aparté, cette construction permet à l'utilisateur d'appeler le script comme:

 
$ ./test-script foo=bar 

plutôt que le plus idiomatique (mais déroutant à certains):

 
$ foo=bar ./test-script 
+0

Merci. Mais comment est la première option non sécurisée? – abc

+4

Chaque fois que vous évaluez une chaîne, vous donnez à l'utilisateur qui peut construire la chaîne la possibilité de faire quoi que ce soit au script. –