#!/bin/bash
# ex9.sh

# Variables : affectation et évaluation

a=375
bonjour=$a

#-------------------------------------------------------------------------
#  Aucun espace de chaque côté du signe =  n'est autorisé lorsque
#+ qu'on initialise une variable.
#  Que se passe-t-il s'il y a un espace ?

#  "VARIABLE =valeur",
#           ^
#  Le script tente d'exécuter la commande "VARIABLE" avec l'argument "=valeur".

#  "VARIABLE= valeur",
#            ^
#% Le script tente d'exécuter la commande "valeur" avec
#+ la variable d'environnement "VARIABLE" initialisée à  "".
#-------------------------------------------------------------------------


echo bonjour    # bonjour
# Ceci n'est pas une référence à une variable, juste la chaîne "bonjour"

echo $bonjour   # 375
#    ^          Cette fois, c'est bien la référence à une variable.
echo ${bonjour} # 375
# Également la référence à une variable, comme ci-dessus.

# Entre guillemets...
echo "$bonjour"    # 375
echo "${bonjour}"  # 375

echo

bonjour="A B  C   D"
echo $bonjour   # A B C D
echo "$bonjour" # A B  C   D
# Comme on peut le voir echo $bonjour et echo "$bonjour" donnent des résultats différents.
# Pourquoi ?
# ==========================================================
# Mettre une variable entre guillemets préserve les espaces.
# ==========================================================

echo

echo '$bonjour'  # $bonjour
#    ^        ^
#  Désactive (échappe) le référencement de variables à l'aide d'apostrophes simples,
#+ ce qui provoque l'interprétation littérale du "$".

# Notez l'effet des différents types de protection.


bonjour=    # L'affecte d'une valeur nulle
echo "\$bonjour (valeur nulle) = $bonjour"
#  Noter qu'affecter une valeur nulle à une variable n'est pas la même chose
#+ que de la "détruire" bien que le résultat final soit le même (voir plus bas).

# --------------------------------------------------------------

#  Il est tout à fait possible d'affecter plusieurs variables sur une même ligne,
#+ si elles sont séparées par des espaces.
#  Attention, cela peut rendre le script difficile à lire et peut ne pas être portable.

var1=21  var2=22  var3=$V3
echo
echo "var1=$var1   var2=$var2  var3=$var3"

# Peut causer des problèmes avec les vieilles versions de "sh"...

# --------------------------------------------------------------

echo; echo

nombres="un deux trois"
#          ^    ^
autres_nombres="1 2 3"
#                ^ ^
# En cas d'espaces à l'intérieur d'une variable, une protection est nécessaire.
# autres_nombres=1 2 3                  # Donne un message d'erreur.
echo "nombres = $nombres"
echo "autres_nombres = $autres_nombres"   # autres_nombres = 1 2 3
#  Fonctionne aussi avec un échappement du blanc.
paquet_melange=2\ ---\ NimporteQuoi
#            ^    ^ Espace après l'échappement (\).

echo "$paquet_melange"         # 2 --- NimporteQuoi

echo; echo

echo "variable_non_initialisee = $variable_non_initialisee"
# Une variable non initialisée a une valeur vide  (pas de valeur du tout).
variable_non_initialisee=   #  Déclaration sans initialisation
                            #+ (même chose que de lui assigner une valeur vide
                            #+ comme ci-dessus)
echo "variable_non_initialisee = $variable_non_initialisee"
                            # Elle a encore une valeur nulle.

variable_non_initialisee=23       # On lui affecte une valeur.
unset  variable_non_initialisee   # On lui enlève sa valeur.
echo "variable_non_initialisee = $variable_non_initialisee"
                                  # Elle a de nouveau une valeur nulle

echo

exit 0
