Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    91
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    No. La shell non sa nulla di grep o egrep, se non fai quoting applicherà il normale globbing, espandendo * e altri caratteri magici; a grep non arriverà il tuo pattern, ma i nomi dei file già espansi dalla shell.
    Per "bloccare" il globbing devi usare gli apici singoli o doppi.

    ciao , grazie della risposta : 1) se la shell non sa nulla di grep e regular expression , e se è necessario fare il quoting , a cosa serve usare la sbarra rovesciata \ davanti a caratteri come * \ . ect ????? inoltre , come si fa a far in modo che grep interpreti in modo letterale i caratteri * \ ect , senza la shell prima li espanda considerandoli metacaratteri?

  2. #2
    Quote Originariamente inviata da toni00t Visualizza il messaggio
    ciao , grazie della risposta : 1) se la shell non sa nulla di grep e regular expression , e se è necessario fare il quoting , a cosa serve usare la sbarra rovesciata \ davanti a caratteri come * \ . ect ????? inoltre , come si fa a far in modo che grep interpreti in modo letterale i caratteri * \ ect , senza la shell prima li espanda considerandoli metacaratteri?
    Il problema è che ci sono due livelli di escaping.

    Se non metti la stringa tra virgolette, la shell fa globbing a meno che i caratteri speciali non siano preceduti da \. In questo caso "passano" direttamente al comando, cosa di cui puoi avere prova facendo qualche test con il comando echo:
    codice:
    matteo@teolapkubuntu:~/py/test$ echo *
    backup.py backup.pyc
    matteo@teolapkubuntu:~/py/test$ echo \*
    *
    Tuttavia, * a sua volta ha un significato speciale nelle regex; se vuoi matchare * in una regex, deve arrivare a grep come \*, motivo per cui dovresti fare un doppio escaping, dato che sia il backslash che l'* devono essere escapati perché la shell non li tocchi:
    codice:
    matteo@teolapkubuntu:~/py/test$ echo \\\*
    \*
    In questa maniera rischi di ritrovarti con una quantità improbabile di backslash ogni volta che usi le regexp; per questo motivo, normalmente le regexp si mettono tra apici singoli, in modo che la shell non ci metta (praticamente) mano:
    codice:
    matteo@teolapkubuntu:~/py/test$ echo '*'
    *
    matteo@teolapkubuntu:~/py/test$ echo '\*'
    \*
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.