Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Capitolo 9. Variabili riviste | Avanti |
Simile al comando let, il costrutto ((...)) consente l'espansione e la valutazione aritmetica. Nella sua forma più semplice, a=$(( 5 + 3 )) imposta "a" al valore "5 + 3", cioè 8. Non solo, ma questo costrutto consente di gestire, in Bash, le variabili con la sintassi del linguaggio C.
Esempio 9-31. Gestire le variabili in stile C
#!/bin/bash # Manipolare una variabile, in stile C, usando il costrutto ((...)). echo (( a = 23 )) # Impostazione, in stile C, con gli spazi da entrambi i lati #+ dell' "=". echo "a (valore iniziale) = $a" (( a++ )) # Post-incremento di 'a', stile C. echo "a (dopo a++) = $a" (( a-- )) # Post-decremento di 'a', stile C. echo "a (dopo a--) = $a" (( ++a )) # Pre-incremento di 'a', stile C. echo "a (dopo ++a) = $a" (( --a )) # Pre-decremento di 'a', stile C. echo "a (dopo --a) = $a" echo ########################################################################### # Fate attenzione che, come nel C, gli operatoti di pre- e post-decremento #+ hanno effetti collaterali leggermente differenti. n=1; let --n && echo "Vero" || echo "Falso" # Falso n=1; let n-- && echo "Vero" || echo "Falso" # Vero # Grazie, Jeroen Domburg. ########################################################################### echo (( t = a<45?7:11 )) # Operatore ternario del C. echo "Se a < 45, allora t = 7, altrimenti t = 11." echo "t = $t " # Si! echo # --------------------- # Attenzione, sorpresa! # --------------------- # Evidentemente Chet Ramey ha contrabbandato un mucchio di costrutti in #+ stile C, non documentati, in Bash (in realtà adattati da ksh, in #+ quantità notevole). # Nella documentazione Bash, Ramey chiama ((...)) matematica di shell, #+ ma ciò va ben oltre l'aritmetica. # Mi spiace, Chet, ora il segreto è svelato. # Vedi anche l'uso del costrutto ((...)) nei cicli "for" e "while". # Questo costrutto funziona solo nella versione 2.04 e successive, di Bash. exit 0 |
Vedi anche Esempio 10-12 e Esempio 8-4.