4.2. Affectation de variable

=

L'opérateur d'affectation (pas d'espace avant et après)

[Attention]

Attention

Ne pas confondre ceci avec = et -eq, qui teste, au lieu d'affecter !

Cependant, notez que = peut être un opérateur d'affectation ou de test, suivant le contexte.

Exemple 4.2. Affectation basique de variable

#!/bin/bash
# Variables nues

echo

# Quand une variable est-elle «nue», c'est-à-dire qu'il lui manque le signe '$' ?
# Quand on lui affecte une valeur, plutôt que quand elle est référencée.

# Affectation
a=879
echo "La valeur de \"a\" est $a."

# Affectation utilisant 'let'
let a=16+5
echo "La valeur de \"a\" est maintenant $a."

echo

# Dans une boucle 'for' (en fait, un type d'affectation déguisée) :
echo -n "Les valeurs de \"a\" dans la boucle sont : "
for a in 7 8 9 11
do
  echo -n "$a "
done

echo
echo

# Dans une instruction 'read' (un autre type d'affectation) :
echo -n "Entrez \"a\" "
read a
echo "La valeur de \"a\" est maintenant $a."

echo

exit 0

Exemple 4.3. Affectation de variable, basique et élaborée

#!/bin/bash

a=23              # Cas simple
echo $a
b=$a
echo $b

# Maintenant, allons un peu plus loin (substitution de commande).

a=`echo Hello!`   # Affecte le résultat de la commande 'echo' à 'a'
echo $a
#  Notez qu'inclure un point d'exclamation à l'intérieur d'une substitution de
#+ commandes ne fonctionnera pas à partir de la ligne de commande,
#+ car ceci déclenche le mécanisme d'historique de Bash.
#  Néanmoins, à l'intérieur d'un script, les fonctions d'historique sont
#+ désactivées.

a=`ls -l`         #  Affecte le résultat de la commande 'ls -l' à 'a'
echo $a           #  Néanmoins, sans guillemets, supprime les tabulations et les
                  #+ retours chariots.
echo
echo "$a"         # La variable entre guillemets préserve les espaces blancs
                  # (voir le chapitre sur les "Guillemets").

exit 0

Affectation de variable utilisant le mécanisme $(...) (une méthode plus récente que l'apostrophe inverse). En fait, c'est un type de substitution de commandes.

# provenant de  /etc/rc.d/rc.local
R=$(cat /etc/redhat-release)
arch=$(uname -m)