Qual é a diferença entre declare e typeset

22

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

Rahul Patil
fonte

Respostas:

27

Em bash, typesete declaresã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 de manual ainda 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 outras conchas, por exemplo ksh93,. Se você deseja portabilidade entre shell, use typeset(e verifique se a maneira como a chama) é portátil. Se você não se importa com essa portabilidade, use declare.

Chris Down
fonte
você pode fornecer alguns exemplos de onde e por que esse uso no script bash
Rahul Patil
11
... como eu disse, eles são exatamente os mesmos. Eu não entendo como posso diferenciá-los se eles são assim.
Chris Baixo
2
Um bom. Observe que "obsoleto" apenas aparece em help typeset, não em man typeset.
Fedorqui
2
@ ChrisDown, você não saberia por que exatamente typeseté considerado obsoleto?
Alexej Magura 5/10
3

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

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value
Gilles Quenot
fonte
Este é um bom comentário, mas como é que a resposta à pergunta que é de cerca typesete declare?
Jw013
Isso já é bem respondida por Chris para baixo, a minha resposta é apenas um caso em que é útil
Gilles Quenot
Talvez eu não estivesse claro. Comentários devem ser comentários e respostas devem ser respostas. Este é um comentário, não uma resposta.
Jw013
3
Meu trecho não limpar em um comentário
Gilles Quenot
mas você ainda pode atribuir variáveis ​​com typeset ... basta substituir declare por typeset e você ainda obtém o mesmo resultado.
Pcarvalho