¿Cuál es la diferencia entre set, env, declare y export cuando se configura una variable en un shell de Linux?

17

¿Cuál es la diferencia entre set, env, declarey exportal establecer una variable en un shell de Linux, tales como bash?

usuario3872279
fuente
1
¿Por qué se rechazó esta pregunta?
l0b0

Respuestas:

5

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 ~#
Shawn P.
fuente
declarey sety env? exportar vs declarar?
Pacerier
Debo denunciar esto porque simplemente no responde la pregunta.
Daniel C. Sobral
Avísame si esto es mejor.
Shawn P.
1

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.

  1. 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 -iindicador
  2. set: 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 .
  3. declare: sin ninguna opción, lo mismo que env; también se puede usar para establecer la variable de shell
  4. export: hace que las variables de shell sean variables de entorno

En breve:

  1. set no establece shell ni variables de entorno
  2. env puede establecer variables de entorno para un solo comando
  3. declare establece variables de shell
  4. export hace variables de shell variables de entorno

NOTA declare -x VAR=VAL crea la variable de shell y también la exporta, por lo que es variable de entorno.

Tran Triet
fuente