pubblicato Lunedì 02 Aprile del 2007 alle 16:22.

Sono passati 11 mesi da quando ho iniziato a scrivere il mio gestore per blog in BASH. Di esperimenti ne ho fatti, e di modifiche anche. Spesso mi sono reso conto che potevo fare la stessa cosa in modi diversi, e quindi mi ponevo il problema di scegliere la migliore soluzione. Un esempio è la possibilità di prelevare il contenuto di un file una riga per volta, questo mi è servito per poter usare dei file di configurazione in alcuni dei miei script. Ci sono due possibilità: usare while + read; usare "un ciclo qualsiasi" + sed. È probabile che ci siano altri modi, ma al momento non ne conosco nessun altro. Ognuno di queste strutture hanno delle varianti, ed al momento ne conosco due per ogni struttura. Propongo dei piccoli esempi. Il primo esempio è anche il primo che io abbia adottato: NUMERO_RIGHE_TOTALI=`sed -n '$'= ~/FILE.txt` a=1 until [ $a -gt $NUMERO_RIGHE_TOTALI ]; do var="`sed -n "$a"p ~/FILE.txt`" echo $var a=$((a+1)) done Il secondo, è molto in stile linguaggio C: NUMERO_RIGHE_TOTALI=`sed -n '$'= ~/FILE.txt` for ((a=1; a <= NUMERO_RIGHE_TOTALI; a++)); do var="`sed -n "$a"p ~/FILE.txt`" echo $var done La terza soluzione usiamo "read": while read -r var; do echo $var done < ~/FILE.txt La quarta ed ultima variante: cat ~/FILE.txt | while read -r var; do echo $var done Fra le quattro soluzioni, la mia scelta è stata la terza, cioè la struttura che si basa su "read", in quanto questa struttura ha le migliori prestazioni e fra le due varianti questa perché mi sembra la più pulita. Agli occhi più attenti non sarà sfuggito che con "read" uso l'opzione -r. Questo perché read consideri anche il carattere backslash "\" come un normale carattere e non come un metacarattere. Per maggiori info leggetevi il manuale di Bash, man bash.

Ad ognuno la sua scelta. [wink]
Have a fun.

[feed] Feed dei commenti [etichetta] Etichette: bash

powered by FreeFind
Il sito è una creazione di Maurizio... ed è pubblicato sotto una Licenza CC; esso non viene aggiornato
in maniera periodica, pertanto non può essere considerato un prodotto editoriale ai sensi della legge n. 62 del 7.03.2001.