4.2. Assegnamento di variabile

=

è l'operatore di assegnamento (nessuno spazio prima e dopo)

Attenzione

Da non confondere con = e -eq, che servono per le verifiche!

È da notare che l'= può essere sia l'operatore di assegnamento che quello di verifica. Dipende dal contesto in cui si trova.

Esempio 4-2. Assegnamento esplicito di variabile

#!/bin/bash
# Variabili nude

echo

# Quando una variabile è "nuda", cioè, senza il '$' davanti?
# Durante l'assegnamento, ma non nella referenziazione.

# Assegnamento
a=879
echo "Il valore di \"a\" è $a."

# Assegnamento con l'utilizzo di 'let'
let a=16+5
echo "Il valore di \"a\" ora è $a."

echo

# In un ciclo 'for' (in realtà, un tipo di assegnamento mascherato):
echo -n "I valori di \"a\" nel ciclo sono: "
for a in 7 8 9 11
do
  echo -n "$a "
done

echo
echo

# In un enunciato 'read' (un altro tipo di assegnamento):
echo -n "Immetti il valore di \"a\" "
read a
echo "Il valore di \"a\" ora è $a."

echo

exit 0

Esempio 4-3. Assegnamento di variabile, esplicito e indiretto

#!/bin/bash

a=23              # Caso comune
echo $a
b=$a
echo $b

# Ora in un modo un po' più raffinato (sostituzione di comando).

a=`echo Ciao!`    # Assegna il risultato del comando 'echo' ad 'a'
echo $a

#  Nota: l'inserimento del punto esclamativo (!) all'interno del costrutto
#+ di sostituzione di comando non funziona da riga di comando,
#+ perché il ! attiva il "meccanismo di cronologia" della shell Bash. 
#+ All'interno di uno script, però,
#+ le funzioni di cronologia sono disabilitate.

a=`ls -l`         #  Assegna il risultato del comando 'ls -l' ad 'a'
echo $a           #  Senza l'utilizzo del quoting vengono eliminate 
                  #+ le tabulazioni ed i ritorni a capo.
echo
echo "$a"         # L'utilizzo del quoting preserva gli spazi.
                  # (Vedi il capitolo sul "Quoting.")

exit 0

Assegnamento di variabile utilizzando $(...) (metodo più recente rispetto agli apici inversi). In realtà si tratta di una forma particolare di sostituzione di comando.

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