4.3. Le variabili Bash non sono tipizzate

A differenza di molti altri linguaggi di programmazione, Bash non differenzia le sue variabili per "tipo". Essenzialmente le variabili Bash sono stringhe di caratteri, ma, in base al contesto, la shell consente le operazioni con interi e i confronti di variabili. Il fattore determinante è se il valore di una variabile sia formato, o meno, solo da cifre.

Esempio 4-4. Intero o stringa?

#!/bin/bash
# int-or-string.sh: Intero o stringa?

a=2334                   # Intero.
let "a += 1"
echo "a = $a "           # a = 2335
echo                     # Intero, ancora.


b=${a/23/BB}             # Sostituisce "23" con "BB".
                         # Questo trasforma $b in una stringa.
echo "b = $b"            # b = BB35
declare -i b             # Dichiararla come intero non aiuta.
echo "b = $b"            # b = BB35

let "b += 1"             # BB35 + 1 =
echo "b = $b"            # b = 1
echo

c=BB34
echo "c = $c"            # c = BB34
d=${c/BB/23}             # Sostituisce "BB" con "23".
                         # Questo trasforma $d in un intero.
echo "d = $d"            # d = 2334
let "d += 1"             # 2334 + 1 =
echo "d = $d"            # d = 2335
echo

# Che dire a proposito delle variabili nulle?
e=""
echo "e = $e"            #  e =
let "e += 1"             #  Sono consentite le operazioni aritmetiche sulle 
                         #+ variabili nulle?
echo "e = $e"            #  e = 1
echo                     #  Variabile nulla trasformata in un intero.

# E sulle variabili non dichiarate?
echo "f = $f"            # f =
let "f += 1"             # Sono consentite le operazioni aritmetiche?
echo "f = $f"            # f = 1
echo                     # Variabile non dichiarata trasformata in un intero.



# Le variabili in Bash non sono tipizzate.

exit 0

Le variabili non tipizzate sono sia una benedizione che una calamità. Permettono maggiore flessibilità nello scripting (abbastanza corda per impiccarvici!) e rendono più semplice sfornare righe di codice. Per contro, consentono errori subdoli e incoraggiano stili di programmazione disordinati.

È compito del programmatore tenere traccia dei tipi di variabili contenute nello script. Bash non lo farà per lui.