Qual é a diferença entre set
, env
, declare
e export
ao definir uma variável em um shell Linux, tais como bash
?
Qual é a diferença entre set
, env
, declare
e export
ao definir uma variável em um shell Linux, tais como bash
?
Respostas:
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 ~#
declare
e set
e env
? exportar vs declarar?
Primeiro, você deve entender isso environment variables
e shell variables
nã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.
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 -i
sinalizadorset
: sem opções, o nome e o valor de cada variável do shell são exibidos * ~ da execução man set
no rhel; também pode ser usado para definir o atributo shell . Este comando NÃO configura variável de ambiente nem shell .declare
: sem opções, o mesmo que env
; também pode ser usado para definir variáveis de shellexport
: torna variáveis de ambiente variáveis de shellEm resumo:
set
não define shell nem variáveis de ambienteenv
pode definir variáveis de ambiente para um único comandodeclare
define variáveis de shellexport
faz variáveis de ambiente de variáveis de shellNOTA
declare -x VAR=VAL
cria a variável shell e também a exporta, tornando-a variável de ambiente.