Successivo: , Su: Costanti   [Contenuti][Indice]


6.1.1.1 Costanti numeriche e stringhe

Una costante numerica è un numero. Questo numero può essere un numero intero, una frazione decimale o un numero in notazione scientifica (esponenziale).30 Ecco alcuni esempi di costanti numeriche che hanno tutte lo stesso valore:

105
1.05e+2
1050e-1

Una costante stringa è formata da una sequenza di caratteri racchiusi tra doppi apici. Per esempio:

"pappagallo"

rappresenta la stringa il cui contenuto è la parola ‘pappagallo’. Le stringhe in gawk possono essere di qualsiasi lunghezza, e possono contenere tutti i possibili caratteri ASCII a otto bit, compreso il carattere ASCII NUL (carattere con codice zero). Altre implementazioni di awk possono avere difficoltà con alcuni particolari codici di carattere.

Alcuni linguaggi di programmazione consentono la continuazione di stringhe lunghe su più righe, qualora una riga termini con una barra inversa. Per esempio in C:

#include <stdio.h>

int main()
{
    printf("ciao, \
mondo\n");
    return 0;
}

In questo caso, il compilatore C rimuove sia la barra inversa che il carattere di avanzamento riga (newline), producendo una stringa che equivale ad aver immesso ‘"ciao, mondo\n"’. Ciò torna utile quando una stringa deve contenere una grande quantità di testo.

Lo standard POSIX afferma esplicitamente che il carattere di avanzamento riga non è consentito all’interno di costanti di tipo stringa. E in effetti, tutte le implementazioni di awk emettono un messaggio di errore se si tenta di utilizzarlo. Per esempio:

$ gawk 'BEGIN { print "ciao, 
> mondo" }'
-| gawk: riga com.:1: BEGIN { print "ciao,
-| gawk: riga com.:1:                ^ stringa non terminata
-| gawk: riga com.:1: BEGIN { print "ciao,
-| gawk: riga com.:1:                ^ syntax error

Sebbene POSIX non definisca cosa succede usando un carattere protetto di avanzamento riga, come nell’esempio in linguaggio C visto sopra, tutte le versioni di awk consentono di farlo. Sfortunatamente, quello che una particolare versione di awk fa con una tale stringa non è uniforme. (a.b.) gawk, mawk, e OpenSolaris POSIX awk (vedi la sezione Altre implementazioni di awk liberamente disponibili) tolgono sia la barra inversa che il carattere di avanzamento riga, come avviene nel linguaggio C:

$ gawk 'BEGIN { print "ciao, \
> mondo" }'
-| ciao, mondo

In modalità POSIX (vedi la sezione Opzioni sulla riga di comando), gawk non consente caratteri protetti di avanzamento riga. Altrimenti, il comportamento è quello descritto sopra.

BKW awk e BusyBox awk tolgono la barra inversa, ma lasciano indisturbato il carattere di avanzamento riga, che fa quindi parte della stringa:

$ nawk 'BEGIN { print "ciao, \
> mondo" }'
-| ciao,
-| mondo

Note a piè di pagina

(30)

La rappresentazione interna di tutti i numeri, compresi gli interi, usa numeri in virgola mobile a doppia precisione. Sui sistemi più moderni, questi sono nel formato standard IEEE 754. Vedi la sezione Calcolo con precisione arbitraria con gawk, per maggiori informazioni.


Successivo: , Su: Costanti   [Contenuti][Indice]