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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

echo -n ${VarVuota:=’Vuota’}’ ’ # Vuota Vuota<br />

echo ${VarVuota}<br />

VarVuota=”<br />

Appen<strong>di</strong>ce A. Script aggiuntivi<br />

echo ’- Nessuna mo<strong>di</strong>fica se il contenuto della variabile non è nullo -’<br />

echo ${VarQualcosa=’Contenuto’} # Letterale<br />

echo ${VarQualcosa:=’Contenuto’} # Letterale<br />

# Array-<strong>Bash</strong> ad "in<strong>di</strong>cizzazione sparsa"<br />

###<br />

# In modo predefinito, gli Array-<strong>Bash</strong> sono ad in<strong>di</strong>cizzazione raggruppata<br />

#+ e iniziano dall’in<strong>di</strong>ce zero, se non altrimenti specificato.<br />

###<br />

# L’inizializzazione <strong>di</strong> un Array viene effettuata come appena descritto<br />

#+ se non "altrimenti specificato". Ecco il metodo alternativo:<br />

###<br />

echo<br />

declare -a ArraySparso<br />

ArraySparso=( [1]=uno [2]=” [4]=’quattro’ )<br />

# [0]=referenziazione nulla, [2]=contenuto nullo, [3]=referenziazione nulla<br />

echo ’- - Elencazione <strong>di</strong> Array-Sparso - -’<br />

# Tra doppi apici, impostazione <strong>di</strong> default <strong>di</strong> IFS, Corrispondenza globale<br />

IFS=$’\x20’$’\x09’$’\x0A’<br />

printf %q "${ArraySparso[*]}"<br />

echo<br />

# Notate che l’output non fa <strong>di</strong>stinzione tra "contenuto nullo"<br />

#+ e "referenziazione nulla".<br />

# Entrambi vengono visualizzati come spazi preceduti dal carattere <strong>di</strong> escape.<br />

###<br />

# Notate ancora che l’output NON visualizza lo spazio preceduto dall’escape<br />

#+ per la/e "referenziazione/i nulla/e" precedenti il primo elemento definito.<br />

###<br />

# Questo comportamento, delle versioni 2.04, 2.05a e 2.05b, è stato<br />

#+ segnalato e potrebbe cambiare in una futura versione <strong>di</strong> <strong>Bash</strong>.<br />

# La visualizzazione <strong>di</strong> un array sparso che mantenga intatta la relazione<br />

#+ [in<strong>di</strong>ce]=valore, richiede un po’ <strong>di</strong> programmazione.<br />

# Una soluzione possibile è rappresentata dal seguente frammento <strong>di</strong> co<strong>di</strong>ce:<br />

###<br />

# local l=${#ArraySparso[@]} # Conteggio degli elementi definiti<br />

# local f=0 # Conteggio degli in<strong>di</strong>ci rilevati<br />

# local i=0 # In<strong>di</strong>ce da verificare<br />

( # Funzione anonima ***<br />

for (( l=${#ArraySparso[@]}, f = 0, i = 0 ; f < l ; i++ ))<br />

do<br />

# ’se definito allora...’<br />

${ArraySparso[$i]+ eval echo ’\ [’$i’]=’${ArraySparso[$i]} ; (( f++ )) }<br />

done<br />

)<br />

739

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

Saved successfully!

Ooh no, something went wrong!