Quelle est la différence entre déclarer et composer


22

Quelqu'un peut-il expliquer la différence entre déclarer et composer avec des exemples réels.

Réponses:


27

Dans bash, typesetet declaresont exactement les mêmes. La seule différence est qu'elle typesetest considérée comme obsolète.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

La page de manuel les répertorie même du même souffle:

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

typesetest portable pour certains autres shells, par exemple ksh93,. Si vous visez la portabilité cross-shell, utilisez typeset(et assurez-vous que la façon dont vous l'appelez est portable). Si vous ne vous souciez pas d'une telle portabilité, utilisez declare.


pouvez-vous s'il vous plaît fournir un exemple où et pourquoi cette utilisation dans le script bash
Rahul Patil

1
... comme je l'ai dit, ils sont exactement les mêmes. Je ne comprends pas comment je peux les différencier s'ils le sont.
Chris Down

2
Bon. Notez que "obsolète" apparaît simplement dans help typeset, pas dans man typeset.
fedorqui

2
@ChrisDown, vous ne sauriez pas pourquoi, exactement, typesetest considéré comme obsolète?
Alexej Magura

3

Je connais un cas où il declareest utile d'éviter le mal eval: indirection variable :

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

C'est un bon commentaire, mais comment cela répond-il à la question qui porte sur typesetet declare?
jw013

C'est déjà bien répondu par Chris Down, ma réponse est juste un cas où c'est utile
Gilles Quenot

Peut-être que je n'étais pas clair. Les commentaires doivent être des commentaires et les réponses doivent être des réponses. Ceci est un commentaire, pas une réponse.
jw013

3
Mon extrait ne s'effacerait pas dans un commentaire
Gilles Quenot

mais vous pouvez toujours assigner des variables avec typeset ... remplacez simplement declare par typeset et vous obtenez toujours le même résultat.
pcarvalho
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.