¿Cuál es la diferencia entre set, env, declarey exportal establecer una variable en un shell de Linux, tales como bash?
¿Cuál es la diferencia entre set, env, declarey exportal 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 ~#
declarey sety env? exportar vs declarar?
Primero, debes entender eso environment variablesy shell variablesno 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 -iindicadorset: sin opciones, el nombre y el valor de cada variable de shell se muestran * ~ al ejecutarse man seten 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.