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.

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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.