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.

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

# il modello <strong>di</strong> sottostringa nullo significa ’iniziale’<br />

echo ${stringaZ/#/NUOVO} # NUOVOabcABC123ABCabc<br />

echo ${arrayZ[@]/#/NUOVO} # Applicato a ciascun elemento.<br />

echo ${sparsoZ[@]/#/NUOVO} # Applicato anche ai contenuti nulli.<br />

# Questo sembra ragionevole.<br />

echo<br />

echo ’- Tutte le occorrenze finali -’<br />

# il modello <strong>di</strong> sottostringa nullo significa ’finale’<br />

echo ${stringaZ/%/NUOVO} # abcABC123ABCabcNUOVO<br />

echo ${arrayZ[@]/%/NUOVO} # Applicato a ciascun elemento.<br />

echo ${sparsoZ[@]/%/NUOVO} # Applicato anche ai contenuti nulli.<br />

# Questo sembra ragionevole.<br />

echo<br />

echo ’- - Casi particolari <strong>di</strong> Modello-Globale Per-Ogni - -’<br />

echo ’- - - - È bello sognare - - - -’<br />

echo<br />

_GenFunz() {<br />

echo -n ${0} # Solo a scopo <strong>di</strong>mostrativo.<br />

# In realtà sarebbe un compututo arbitrario.<br />

}<br />

# Tutte le occorrenze che verificano il modello QualsiasiCosa.<br />

# Attualmente //*/ non verifica il contenuto nullo né la referenziazione nulla.<br />

# /#/ e /%/ verificano il contenuto nullo ma non la referenziazione nulla.<br />

echo ${sparsoZ[@]//*/$(_GenFunz)}<br />

# Una sintassi possibile potrebbe essere quella <strong>di</strong> rendere<br />

#+ la notazione dei parametri usati conforme al seguente schema:<br />

# ${1} - L’elemento completo<br />

# ${2} - L’occorrenza iniziale, se esiste, della sottostringa verificata<br />

# ${3} - La sottostringa verificata<br />

# ${4} - L’occorrenza finale, se esiste, della sottostringa verificata<br />

#<br />

# echo ${sparsoZ[@]//*/$(_GenFunz ${3})} # Inquesto caso uguale a ${1}.<br />

# Verrà forse implementato in una futura versione <strong>di</strong> <strong>Bash</strong>.<br />

exit 0<br />

# [N.d.T.]<br />

# *<br />

# Il termine "namespace" (spazio del nome) in<strong>di</strong>ca un "contenitore"<br />

#+ adatto a risolvere il problema dei conflitti tra identificatori uguali.<br />

#+ Nel caso specifico significa che in <strong>Bash</strong> è possibile usare lo stesso<br />

#+ nome sia per una variabile che per una funzione, senza che ciò provochi<br />

#+ problemi nell’esecuzione del programma. Sebbene questo sia permesso è,<br />

#+ però, caldamente sconsigliato dallo stesso M. Cooper a causa della<br />

#+ confusione che una tale pratica può generare nella comprensione<br />

#+ del funzionamento <strong>di</strong> uno script.<br />

746

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

Saved successfully!

Ooh no, something went wrong!