Qual é a diferença entre declarar e escrever

Alguém pode explicar a diferença entre declarar e escrever com exemplos da vida real.

Resposta

Em bash, typeset e declare são exatamente os mesmos. A única diferença é que typeset é considerado obsoleto.

 typeset: typeset [-aAfFgilrtux] [-p] name[=value] ... Set variable values and attributes. Obsolete. See `help declare".  

A página do manual até os lista na mesma respiração:

 declare [-aAfFgilrtux] [-p] [name[=value] ...] typeset [-aAfFgilrtux] [-p] [name[=value] ...] Declare variables and/or give them attributes.  

typeset é portátil para alguns outros shells, por exemplo, ksh93. Se você deseja portabilidade cross-shell, use typeset (e certifique-se de que a forma como você está chamando é portátil). Se você não se importa com essa portabilidade, use declare.

Comentários

  • por favor forneça alguns exemplos de onde e por que esse uso no script bash
  • … como eu disse, eles são exatamente os mesmos. Eu não ' não entendo como eu pode diferenciá-los se forem.
  • Boa. Observe que " obsoleto " aparece apenas em help typeset, não em man typeset.
  • @ChrisDown, você não ' não sei por que, exatamente, typeset é considerado obsoleto?

Resposta

Eu conheço um caso em que declare é útil para evitar o mal eval: indireção variável :

$ var=foo $ x=var $ declare "$x=another_value" $ echo $var another_value 

Comentários

  • Este é um bom comentário, mas como isso responde à pergunta que é ab out typeset e declare?
  • Isso já foi bem respondido por Chris Down, minha resposta é apenas um caso em que isso ' é útil
  • Talvez eu não estivesse ' t claro. Os comentários devem ser comentários e as respostas devem ser respostas. Este é um comentário, não uma resposta.
  • Meu snippet não ' não limpar em um comentário
  • , mas você ainda pode atribuir variáveis com typeset … apenas substitua declare por typeset e você ainda obterá o mesmo resultado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *