9.2. Typer des variables : declare ou typeset

Les commandes internes declare et typeset, qui sont des synonymes exacts, permettent de modifier les propriétés des variables. C'est une forme très faible de saisie [43] disponible dans certains langages de programmation. La commande declare est spécifique aux versions 2 et ultérieures de Bash. La commande typeset fonctionne aussi dans les scripts ksh.

Options pour declare/typeset

-r en lecture seule

(declare -r var1 fonctionne de la même façon que readonly var1)

Ceci est à peu près équivalent au qualificateur C const. Une tentative de modification de la valeur d'une variable en lecture seule échoue en renvoyant un message d'erreur.

declare -r var1=1
echo "var1 = $var1"   # var1 = 1

(( var1++ ))          # x.sh: line 4: var1: variable en lecture seule
-i entier
declare -i nombre
# Ce script va traiter les occurrences suivantes de "nombre" comme un entier.

nombre=3
echo "Nombre = $nombre"     # Nombre = 3

nombre=trois
echo "Nombre = $nombre"     # Nombre = 0
# Essaie d'évaluer la chaîne "trois" comme un entier.

Certaines opérations arithmétiques sont permises pour des variables déclarées entières sans avoir besoin de expr ou de let.

n=6/3
echo "n = $n"       # n = 6/3

declare -i n
n=6/3
echo "n = $n"       # n = 2
-a tableau (array)
declare -a index

La variable index sera traitée comme un tableau.

-f fonction(s)
declare -f

Une ligne declare -f sans argument dans un script donnera une liste de toutes les fonctions définies auparavant dans ce script.

declare -f nom_fonction

Un declare -f nom_fonction dans un script liste simplement la fonction nommée.

-x export
declare -x var3

Ceci déclare la disponibilité d'une variable pour une exportation en dehors de l'environnement du script lui-même.

-x var=$value
declare -x var3=373

La commande declare permet d'assigner une valeur à une variable lors de sa déclaration.

Exemple 9.10. Utiliser declare pour typer des variables

&ex20;

[Attention]

Attention

Utiliser la commande interne declare restreint la portée d'une variable.

foo ()
{
FOO="bar"
}

bar ()
{
foo
echo $FOO
}

bar   # Affiche bar.

Néanmoins...

foo (){
declare FOO="bar"
}

bar ()
{
foo
echo $FOO
}

bar  # N'affiche rien.


# Merci à Michael Iatrou pour cette indication.

9.2.1. Autre utilisation de declare

La commande declare peut servir à identifier des variables environnementales, ou autres. C'est très utile en particulier pour les tableaux.

bash$ declare | grep HOME
/home/bozo

bash$ zzy=68
bash$ declare | grep zzy
zzy=68

bash$ Colors=([0]="violet" [1]="roux"
[2]="vert clair")
bash$ echo ${Colors[@]}
purple reddish-orange light green
bash$ declare | grep Colors
Colors=([0]="violet" [1]="roux" [2]="vert clair")
             


[43] Dans ce contexte, saisir une variable signifie la classifier et restreindre ses propriétés. Par exemple, une variable declared (déclarée) ou typed (typée) comme entier n'est plus disponible pour les opérations sur les chaînes de caractères.

declare -i intvar

intvar=23
echo "$intvar"   # 23
intvar=stringval
echo "$intvar"   # 0