Qual é a diferença entre set, env, declare e export ao definir uma variável em um shell Linux?

17

Qual é a diferença entre set, env, declaree exportao definir uma variável em um shell Linux, tais como bash?

user3872279
fonte
1
Por que essa pergunta foi rejeitada?
precisa saber é o seguinte

Respostas:

5

Parece que set e declare são um pouco diferentes, com set sendo mais poderoso.

Consulte "declare" em https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins declare: "Declare variáveis ​​e atribua-lhes atributos. Se nenhum nome for fornecido, exiba os valores das variáveis em vez de.

Defina "set" em https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "Este componente é tão complicado que merece sua própria seção. Set permite que você altere os valores das opções do shell e defina os parâmetros posicionais ou para exibir os nomes e valores das variáveis ​​do shell ".

ENV é uma variável de ambiente no Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env é um comando do Linux. Eu acho que essa é uma boa referência: /unix/103467/what-is-env-command-doing

Eu pensei que esta era uma boa explicação para exportação: http://www.unix.com/302531838-post2.html

Também: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (da Bourne): "Marque cada nome a ser passado para os processos filho no ambiente."

Emprestando código do URL acima:

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.
fonte
declaree sete env? exportar vs declarar?
Pacerier
Eu tenho que rebaixar isso porque simplesmente não está respondendo à pergunta.
Daniel C. Sobral
Deixe-me saber se isso é melhor.
Shawn P.
1

Primeiro, você deve entender isso environment variablese shell variablesnão é a mesma coisa.

Então, você deve saber que os shells têm atributos que governam como ele funciona. Esses atributos não são variáveis ​​de ambiente nem de shell.

Agora, responda sua pergunta.

  1. env: sem nenhuma opção, mostra as variáveis ​​de ambiente atuais com seus valores; No entanto, pode ser usado para definir variável de ambiente para um único comando com o -isinalizador
  2. set: sem opções, o nome e o valor de cada variável do shell são exibidos * ~ da execução man setno rhel; também pode ser usado para definir o atributo shell . Este comando NÃO configura variável de ambiente nem shell .
  3. declare: sem opções, o mesmo que env; também pode ser usado para definir variáveis ​​de shell
  4. export: torna variáveis ​​de ambiente variáveis ​​de shell

Em resumo:

  1. set não define shell nem variáveis ​​de ambiente
  2. env pode definir variáveis ​​de ambiente para um único comando
  3. declare define variáveis ​​de shell
  4. export faz variáveis ​​de ambiente de variáveis ​​de shell

NOTA declare -x VAR=VAL cria a variável shell e também a exporta, tornando-a variável de ambiente.

Tran Triet
fonte