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.