4.2. Assignació a variable

L’assignació d’un valor a una variable es pot realitzar mitjançant L’operador = sense espais ni abans ni després.

$ variable=23
#        ^ ^  cap espai de separació

No confonguis l’operador d’assignació amb l’operador de comparació (mira XXX 7.3. Other Comparison Operators. La diferència és el context on apareix =.

Exemple 1. Assignació de valors a una variable

#!/bin/bash

# Demostració de diferents tipus d'assignació de valors a una variable

echo

# Una variable apareix sense $ al davant quan està sent assignada, en comptes de
# referenciada.

# Assignació
a=879
echo "El valor de \"a\" és $a."     # Sortida: El valor de "a" és 879.

# Assignació fent servir 'let'
let a=16+5
echo "El valor de \"a\" ara és $a." # Sortida: El valor de "a" ara és 21.

echo

# En un bucle for (una altra manera d'assignar valors):
echo -n "Els valors de \"a\" en el bucle són: "
for a in 7 8 9 11
do
    echo -n "$a "
done
# Sortida: Els valors de "a" en el bucle són: 7 8 9 11

echo
echo

# En una instrucció 'read' (un altre tipus d'assignació):
echo -n "Introdueix un valor per \"a\" "
read a
echo "El valor de \"a\" ara és $a."     # mostrarà el valor introduït

echo

exit 0

Exemple 2. Variable Assignment, plain and fancy

#!/bin/bash

# Demostració d'assignació elegant de valors

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

# Ara una assignació una mica més "elegant" (substitució de comanda).

a=`echo Hello!`     # Assigna el resultat de la comanda
echo $a             # Sortida: Hello!
#  Fixat que des de la línia de comandes no funcionaria incloure l'exclamació en
#+ una substitució de comandes, doncs arrencaria el mecanisme d'historial de
#+ Bash. Aquí funciona perquè dins d'un guió, el historial queda desabilitat per
#+ defecte.

a=`ls -l /`         # Assignem ara el resultat de llistar el contingut de l'arrel
# Si el mostrem sense cometes, s'eliminen espais en blanc.
echo $a             # Sortida: total 112 drwxr-xr-x 2 root root 4096 jun 22 20:43 bin ...
echo
# En canvi, amb cometes es preserva la informació d'espais en blanc.
echo "$a"           # Sortida: total 112
                    #          drwxr-xr-x   2 root root  4096 jun 22 20:43 bin
                    #          drwxr-xr-x   3 root root  4096 jun 22 20:46 boot
                    # ...

a=$(ls -l /)        # Equivalent a l'assignació anterior
echo "$a"

exit 0

L’assignació amb $(...) és un mètode més recent que amb \`..\`, amb tot, és també una forma de substitució de comanda.