Su: Protezione   [Contenuti][Indice]


1.1.6.1 Doppi apici in file .BAT Windows

Sebbene questo Documento in generale si preoccupi solo di sistemi POSIX e della shell POSIX, il problema che stiamo per vedere emerge abbastanza spesso presso parecchi utenti, e per questo ne parliamo.

Le “shell” nei sistemi Microsoft Windows usano il carattere doppio apice per protezione, e rendono difficile o impossibile inserire un carattere doppio apice letterale in uno script scritto su una riga di comando. L’esempio che segue, per il quale ringraziamo Jeroen Brink, mostra come proteggere i doppi apici, con questo script di una sola riga, che stampa tutte le righe di un file, racchiudendole tra doppi apici:

{ print "\"" $0 "\"" } file

In una riga di comando in ambiente MS-Windows lo script di una riga mostrato sopra può essere eseguito immettendo:

gawk "{ print \"\042\" $0 \"\042\" }" file

In questo esempio, lo ‘\042’ è il codice ottale che rappresenta un doppio apice; gawk lo trasforma in un carattere doppio apice per poi scriverlo in output con l’istruzione print.

In ambiente MS-Windows proteggere i doppi apici richiede questo espediente perché occorre usare delle barre inverse per proteggere i doppi apici, ma le barre inverse non sono protette nella solita maniera; in effetti le barre inverse vanno raddoppiate o no a seconda che siano o non siano seguite da un doppio apice. La regola in ambiente MS-Windows per racchiudere tra doppi apici una stringa è la seguente:

  1. Per ogni doppio apice presente nella stringa originale, sia N il numero di barre inverse presenti nella stringa prima di esso (N potrebbe anche valere zero). Si rimpiazzino queste N barre inverse con 2*N+1 barre inverse
  2. Sia poi N il numero di barre inverse alla fine della stringa originale, (N potrebbe anche valere zero). Si rimpiazzino queste N barre inverse con 2*N barre inverse
  3. La stringa così prodotta va racchiusa fra doppi apici.

Quindi, per racchiudere fra doppi apici lo script di una riga ‘{ print "\"" $0 "\"" }’ del precedente esempio, si dovrebbe fare così:

gawk "{ print \"\\\"\" $0 \"\\\"\" }" file

Comunque, usare la notazione ‘\042’ invece che ‘\\\"’ rimane sempre possibile, ed é di più facile lettura, perché le barre inverse che non sono seguite da un doppio apice non hanno bisogno di essere duplicate.


Su: Protezione   [Contenuti][Indice]