web-dev-qa-db-fra.com

Différences entre déclarer, composition et variable locale à bash

Lors de la frappe des variables dans Bash, quelle est la différence entre declare et typeset? Lorsqu'il est utilisé à l'intérieur d'une fonction: quelle est la différence entre declare et typeset et local?

La seule différence que j'ai rencontrée est que la composition est portable aux scripts ksh. Autre que cela, y a-t-il des raisons pour lesquelles on devrait être préféré sur l'autre?

Mise à jour: Ajout de local à la question.

42
lecodesportif
  • Différence entre typeset et declare:

Le premier est plus portable (par exemple ksh), tandis que ce dernier est plus préférable lorsque la portabilité n'est pas une préoccupation.

  • Différence entre declare (ou typeset) et local lorsqu'il est utilisé à l'intérieur d'une fonction:

Le premier implique ce dernier, mais plus puissant. Par exemple, declare -i x fait x avoir l'attribut integer, declare -r x fait x readonly, etc.

27
Hui Zheng

En ce qui concerne Bash, non, il n'y a pas de différence. En fait, le Manpage les a partager la même définition

déclarer [-aaffilrtux] [-p] [nom [= valeur] ...]
Typeset [-aaffilrtux] [-p] [nom [= valeur] ...]
[.____] Déclarez des variables et/ou de leur donner des attributs. Si aucun nom n'est donné, affichez les valeurs des variables. L'option -p affichera les attributs et les valeurs de chaque nom ...

J'ai aussi trouvé cette petite Titre qui justifie encore ma réclamation ainsi que la portabilité ksh que vous avez mentionnée.

Les comestiens de déclaration ou de composition, qui sont les synonymes exacts, permettez de modifier les propriétés des variables. C'est une forme très faible de la dactylographie [1] disponible dans certaines langages de programmation. La commande DECLARE est spécifique à la version 2 ou ultérieure de Bash. La commande typeet fonctionne également dans les scripts ksh.

11
SiegeX

Dans le manuel Bash en vertu de la section 4.2 Bash Bashetin Commands Il indique:

'composer'
Typeset [-affrxi] [-p] [nom [= valeur] ...]
[.____] La commande 'Typeet' est fournie pour la compatibilité avec la coquille Korn; Cependant, il a été obsolète en faveur de la commande "Déclarez".