4.2. Affectation d'une variable

=

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

[Attention]

Attention

Ne pas confondre avec = ou -eq, qui testent, 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

# À quel moment une variable est-elle «nue», c'est-à-dire sans son signe '$' ?
# C'est quand on lui affecte une valeur, pas quand elle est évalué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 plus é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
#  Remarque : 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           #  Sans guillemets, supprime les tabulations et 
                  #+ retours chariots.
echo
echo "$a"         # La variable entre guillemets préserve les 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). C'est un peu une sorte de substitution de commandes.

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