Precedente: , Su: Eseguire gawk   [Contenuti][Indice]


1.1.6 Uso di apici nella shell.

Per programmi awk di lunghezza da corta a media spesso conviene digitare il programma sulla riga di comando awk. La maniera migliore per farlo è racchiudere l’intero programma tra apici singoli. Questo vale sia che si digiti il programma interattivamente su richiesta della shell, sia che lo si scriva come parte di uno script di shell di maggiori dimensioni:

awk 'testo del programma' input-file1 input-file2

Quando si lavora con la shell, non guasta avere una conoscenza di base sulle regole per l’uso di apici nella shell. Le regole seguenti valgono solo per shell in stile Bourne (come Bash, la Bourne-Again shell). Se si usa la C shell, si avranno regole differenti.

Prima di immergerci nelle regole, introduciamo un concetto che ricorre in tutto questo Documento, che è quello della stringa null, o vuota.

La stringa nulla è una variabile, di tipo carattere, che non ha un valore. In altre parole, è vuota. Nei programmi awk si scrive così: "". Nella shell la si può scrivere usando apici sia singoli che doppi: "" oppure ''. Sebbena la stringa nulla non contenga alcun carattere, essa esiste lo stesso. Si consideri questo comando:

$ echo ""

Qui, il comando echo riceve un solo argomento, anche se quell’argomento non contiene alcun carattere. Nel resto di questo Documento, usiamo indifferentemente i termini stringa nulla e stringa vuota. Ora, proseguiamo con le regole relative agli apici:

Mischiare apici singoli e doppi è difficile. Occorre utilizzare trucchi della shell per gli apici, come questi:

$ awk 'BEGIN { print "Questo è un apice singolo. <'"'"'>" }'
-| Questo è un apice singolo. <'>

Questo programma stampa tre stringhe tra apici concatenate tra loro. La prima e la terza sono rinchiuse tra apici singoli, la seconda tra apici doppi.

Quanto sopra può essere “semplificato” così:

$ awk 'BEGIN { print "Questo è un apice singolo <'\''>" }'
-| Questo è un apice singolo <'>

A voi la scelta del più leggibile dei due.

Un’altra opzione è quella di usare doppi apici, proteggendo i doppi apici inclusi, a livello awk:

$ awk "BEGIN { print \"Questo è un apice singolo <'>\" }"
-| Questo è un apice singolo <'>

Quest’opzione è fastidiosa anche perché il doppio apice, la barra inversa e il simbolo del dollaro sono molto comuni nei programmi awk più avanzati.

Una terza opzione è quella di usare le sequenze ottali equivalenti (vedi la sezione Sequenze di protezione) per i caratteri apice singolo e doppio, così:

$ awk 'BEGIN { print "Questo è un apice singolo <\47>" }'
-| Questo è un apice singolo <'>
$ awk 'BEGIN { print "Questo è un doppio apice <\42>" }'
-| Questo è un doppio apice <">

Questo funziona bene, ma si dovrebbe commentare chiaramente quel che la sequenza di protezione significa.

Una quarta possibilità è di usare assegnamenti di variabili sulla riga di comando, così:

$ awk -v sq="'" 'BEGIN { print "Questo è un apice singolo <" sq ">" }'
-| Questo è un apice singolo <'>

(Qui, le due stringhe costanti e il valore di sq sono concatenati in un’unica stringa che è stampata da print.)

Se servono veramente sia gli apici singoli che quelli doppi nel proprio programma awk, è probabilmente meglio tenerlo in un file separato, dove la shell non interferisce, e si potrà scrivere quello che si vuole.


Precedente: , Su: Eseguire gawk   [Contenuti][Indice]