web-dev-qa-db-fra.com

Récupère le type de variable dans bash

Dans Python je peux obtenir le type de variable en:

>>> i = 123
>>> type(i)
<type 'int'>

J'ai vu sur cette page qu'il n'y a pas de types de variables dans bash. L'explication donnée est:

Les variables non typées sont à la fois une bénédiction et une malédiction. Ils permettent plus de flexibilité dans les scripts et facilitent le broyage des lignes de code (et vous donnent suffisamment de corde pour vous accrocher!). Cependant, ils permettent également aux erreurs subtiles de s'introduire et encouragent les habitudes de programmation bâclées.

Mais je ne sais pas ce que cela signifie et quels sont les vrais avantages (et inconvénients).

17
tlorin

Bash n'a pas de types de la même manière que Python (bien que je dirais que Python a des classes plutôt que des types). Mais les variables bash ont les attributs qui sont donnés (principalement) via declare, mais la plage d'attributs est assez petite. Vous pouvez trouver un attribut en utilisant declare -p, par exemple, declare -i crée un entier:

declare -i num
num=42
declare -p num

Donne:

declare -i num="42"

Mais c'est une fonctionnalité médiocre par rapport à Python, ou presque n'importe quel langage moderne. Le problème est que dans quelque chose comme Bash, le type de base est une chaîne de texte, et c'est très bien si vous n'avez besoin que de chaînes de texte pour des choses comme les noms de fichiers. Mais une fois que vous commencez à devoir effectuer un traitement lourd, vous avez besoin d'autres types. Bash ne prend pas en charge la virgule flottante, par exemple. Vous avez également besoin de types composés , comme une classe décrivant un fichier avec tous les attributs qu'un fichier peut avoir.

Bash 4 a tableaux associatifs (declare -A), similaire à Python, qui étend considérablement les fonctionnalités.

Même ainsi, la plupart conviendraient que l'orientation d'objet est à peu près impossible dans Bash, bien que certains soutiennent que cela peut être fait dans Korn Shell (qui a des fonctionnalités beaucoup plus puissantes). http://en.wikipedia.org/wiki/Object-oriented_programming

Ce que bash a est bien pour ce à quoi il est destiné - un traitement simple qui est rapide et facile à mettre en œuvre. Mais il existe une masse critique au-delà de laquelle l'utilisation d'un tel langage devient compliquée, sujette aux erreurs et lente. Cette masse critique peut être une échelle, c'est-à-dire une grande quantité de données ou une complexité.

Il n'y a pas de point de coupure simple où vous devriez cesser d'utiliser Bash et passer en Python. C'est juste que les programmes deviennent plus complexes et plus importants pour utiliser Python devient plus fort.

Je dois ajouter que les scripts Shell deviennent rarement plus petits et moins complexes au fil du temps!

12
cdarke