11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

echo<br />

Capitolo 23. Funzioni<br />

# $var_globale è visibile globalmente<br />

exit 0<br />

# A <strong>di</strong>fferenza del C, una variabile <strong>Bash</strong> <strong>di</strong>chiarata all’interno <strong>di</strong> una funzione<br />

#+ è locale "solo" se viene <strong>di</strong>chiarata come tale.<br />

Cautela<br />

Prima che una funzione venga richiamata, tutte le variabili <strong>di</strong>chiarate<br />

all’interno della funzione sono invisibili al <strong>di</strong> fuori del corpo della funzione<br />

stessa, non soltanto quelle esplicitamente <strong>di</strong>chiarate come locali.<br />

#!/bin/bash<br />

funz ()<br />

{<br />

var_globale=37 # Visibile solo all’interno del blocco della funzi<br />

#+ prima che la stessa venga richiamata.<br />

} # FINE DELLA FUNZIONE<br />

echo "var_globale = $var_globale" # var_globale =<br />

# La funzione "funz" non è ancora<br />

#+ chiamata, quin<strong>di</strong> $var_globale q<br />

#+ visibile.<br />

funz<br />

echo "var_globale = $var_globale" # var_globale = 37<br />

# È stata impostata richiamando la<br />

23.2.1. Le variabili locali aiutano a realizzare la ricorsività.<br />

Le variabili locali consentono la ricorsività, 2 ma questa pratica implica, generalmente, un carico<br />

computazionale elevato e, in definitiva, non viene raccomandata in uno script <strong>di</strong> shell. 3<br />

Esempio 23-13. Ricorsività per mezzo <strong>di</strong> una variabile locale<br />

#!/bin/bash<br />

# fattoriale<br />

# ----------<br />

# <strong>Bash</strong> permette la ricorsività?<br />

# Ebbene, sì, ma...<br />

# è così lenta che dovreste avere dei sassi al posto del cervello per usarla.<br />

MAX_ARG=5<br />

460

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!