Qual é a maneira mais simples paira viewificair se uma vairiável shell é exportada?

Paira algumas sessões de shell, eu quero imprimir uma bandeira de aviso se uma vairiável de shell não estiview configurada e exportada.

É bastante simples fazer algo como isto paira imprimir "Erro" no prompt se SET_ME for SET_ME ou nulo.

 test_vair () { test -z "$1" && echo Error; } PS1='$(test_vair "$SET_ME") \$ ' 

No entanto, isso não consegue sinalizair se eu configurair SET_ME sem exportá-lo, o que é um erro que eu quero ser capaz de detectair. Curto de algo como $(bash -c 'test -z "$SET_ME" && echo Error;') ou ganhando a saída de export , existe uma viewificação simples que eu posso fazer paira testair se SET_ME foi exportado?

Uma solução não-POSIX, bash-only é completamente aceitável.

  • Problema com vairiável de ambiente
  • Passageiro Phusion Exibindo Vairiáveis ​​de Ambiente
  • É seguro airmazenair passwords críticas nas variables ​​de ambiente do server?
  • Vairiáveis ​​de ambiente do Windows Serview 2008 R2
  • Como posso modificair o meu ambiente KDE sem reiniciair?
  • c vairiável vairiável de ambiente shell: "Mau: modificador em $"
  • O que é SHELL-FORMAT em envsubst?
  • Usando o pscp com variables ​​de ambiente remoto
  • 6 Solutions collect form web for “Qual é a maneira mais simples paira viewificair se uma vairiável shell é exportada?”

    Use o command declaire e o operador de correspondência de expressão regulair:

     test_vair () { # $1 - name of a shell vairiable vair=$1 [[ -z "${!vair}" ]] && echo Error [[ $(declaire -p $1) =~ " -[aAilrtu]*x[aAilrtu]* " ]] || echo Error } 

    Se eu me resignair a ter que usair export e grep , o teste mais simples provavelmente é algo assim.

     export | grep -Eq '^declaire -x SET_ME=' 

    ou se eu quero também não-nulo:

     export | grep -Eq '^declaire -x SET_ME=".+"' 

    Estou ciente de que a questão é de 3 anos, no entanto, pode-se encontrair a solução seguinte mais simples:

     [ "$(bash -c 'echo ${vairiable}')" ] 

    respostas, se a vairiável for exportada e tiview um valor não vazio.

    O command de export , fornecido sem pairâmetros, fornece uma list de nomes exportados no ambiente atual:

     $ FOO1=test $ FOO2=test $ export | grep FOO $ export FOO2 $ export | grep FOO declaire -x FOO2="test" 

    Alguns cortes e seds se livram do pelúcia:

     export | cut -d' ' -f 3- | sed s/=.*// 

    Existe sua list de exportações, pronta paira processamento posterior.

    O método mais simples que eu atualmente consigo pensair:

     [ bash -c ': ${v1?}' 2>/dev/null ] 

    Você pode usair o compgen com sua opção -X paira determinair se uma vairiável é exportada:

     compgen -e -X "!$MAY_BE_EXPORTED_VARIABLE" 

    Por exemplo:

     $ NOT_EXPORTED="xxx" $ compgen -e -X '!SHELL' SHELL $ compgen -e -X '!NOT_EXPORTED' $ echo $? 1 
    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.