2011-04-26 12 views

Respuesta

11

declare -x FOO es lo mismo que export FOO. "Exporta" la variable FOO como una variable de entorno, por lo que los programas que ejecuta desde esa sesión de shell lo verían.

+0

No creo que sean sinónimos exactos. –

+0

¿No? Entonces, ¿por qué cuando ejecutas 'export' (sin ningún argumento), imprime las exportaciones actuales usando' declare -x'? –

+0

No estoy seguro, pero vea [esta pregunta] (http://stackoverflow.com/q/7506644/834176). Lo intenté y actúan de manera diferente. –

5

Declare -x puede utilizarse en lugar de eval para permitir variables que se establecen como argumentos a la cáscara. Por ejemplo, puede reemplazar la extrema inseguridad:

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

con el más seguro:

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

Dicho sea de paso, esta construcción permite al usuario invocar el script como:

 
$ ./test-script foo=bar 

en lugar de la más idiomática (pero confuso para algunos):

 
$ foo=bar ./test-script 
+0

Gracias. Pero, ¿cómo es la primera opción insegura? – abc

+4

Cada vez que evalúa una cadena, le otorga al usuario que puede construir la cadena la capacidad de hacer que la secuencia de comandos haga cualquier cosa. –

Cuestiones relacionadas