¿Cuál es la diferencia entre set
, env
, declare
y export
al establecer una variable en un shell de Linux, tales como bash
?
¿Cuál es la diferencia entre set
, env
, declare
y export
al establecer una variable en un shell de Linux, tales como bash
?
Respuestas:
Parece que establecer y declarar son ligeramente diferentes, ya que el conjunto es más poderoso.
Consulte "declarar" en https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins declare: "Declare variables y asígneles atributos. Si no se dan nombres, muestre los valores de las variables en lugar.
Establezca "set" en https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "Este builtin es tan complicado que merece su propia sección. Set le permite cambiar los valores de las opciones de shell y establecer los parámetros posicionales, o para mostrar los nombres y valores de las variables de shell ".
ENV es una variable de entorno en Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env es un comando de Linux. Creo que esta es una buena referencia: /unix/103467/what-is-env-command-doing
Pensé que esta era una buena explicación de exportación: http://www.unix.com/302531838-post2.html
También: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (de Bourne): "Marque cada nombre que se pasará a los procesos secundarios en el entorno".
Préstamo de código de la URL anterior:
root@linux ~# x=5 <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash <= subshell creation
root@linux ~# echo $x <= subshell doesnt know $x variable value
root@linux ~# exit <= exit from subshell
exit
root@linux ~# echo $x <= parent shell still knows $x variable
5
root@linux ~# export x=5 <= specify $x variable value using export command
root@linux ~# echo $x <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash <= create subshell again
root@linux ~# echo $x <= now the subshell knows $x variable value
5
root@linux ~#
declare
y set
y env
? exportar vs declarar?
Primero, debes entender eso environment variables
y shell variables
no son lo mismo.
Entonces, debes saber que los shells tienen atributos que gobiernan cómo funciona. Estos atributos no son variables de entorno ni de shell.
Ahora, a responder tu pregunta.
env
: sin ninguna opción, muestra las variables de entorno actuales con sus valores; Sin embargo, se puede usar para establecer la variable de entorno para un solo comando con el -i
indicadorset
: sin opciones, el nombre y el valor de cada variable de shell se muestran * ~ al ejecutarse man set
en rhel; También se puede utilizar para establecer el atributo de shell . Este comando NO establece el entorno ni la variable de shell .declare
: sin ninguna opción, lo mismo que env
; también se puede usar para establecer la variable de shellexport
: hace que las variables de shell sean variables de entornoEn breve:
set
no establece shell ni variables de entornoenv
puede establecer variables de entorno para un solo comandodeclare
establece variables de shellexport
hace variables de shell variables de entornoNOTA
declare -x VAR=VAL
crea la variable de shell y también la exporta, por lo que es variable de entorno.