Quando scrivo
$ grep \$
quindi qualunque cosa scrivo sul terminale, viene abbinata e stampata sul terminale. Come viene \$
interpretato?
Quando scrivo
$ grep \$
quindi qualunque cosa scrivo sul terminale, viene abbinata e stampata sul terminale. Come viene \$
interpretato?
Risposte:
La shell sta interpretando \$
e passando attraverso grep come $
, il carattere di fine riga. Quindi supponendo che la tua linea abbia una fine, corrisponderà :-)
Se vuoi abbinare un vero $
in grep, usa uno di:
grep \\\$
grep '\$'
Nel primo caso, la shell interpreta \\
come \
e \$
come $
dare \$
. In quest'ultimo caso, non lo interpreta affatto.
Per quanto riguarda la tua domanda sul perché \$
corrisponda al simbolo del dollaro piuttosto che alla sequenza di due caratteri, espressioni regolari come quelle utilizzate grep
nell'uso di caratteri speciali per alcuni scopi. Alcuni di questi sono:
$ end of line
^ start of line
. any character
+ 1 or more of the preceeding pattern
* 0 or more of the preceeding pattern
{n,m} between n and m of the preceeding pattern
[x-y] any character between x and y (such as [0-9] for a digit).
insieme a molti altri.
Quando si desidera abbinare un personaggio letterale che viene normalmente trattato come un personaggio speciale, è necessario evitarlo in modo da trattarlo come un personaggio grep
normale.
ls \$
e vedere che otteniamo "ls: $: nessun file o directory", per vedere che \ $ non è convertito in $ ma \\ $ non è convertito in \ $ e così via.
La shell espande innanzitutto tutte le sequenze di escape prima di passare gli argomenti al programma, quindi interpreta la \$
sequenza di escape e passa il singolo argomento $
a grep
, che corrisponde alla fine della riga. Poiché ogni riga ha una fine, allora ogni riga deve corrispondere :)
man grep
; è stato deciso che $
corrisponde alla fine della linea, a prescindere dal fatto che le linee sono separate da \n
, \r
sia, o qualcosa di completamente diverso. Nel caso generale, le espressioni regolari possono essere usate per abbinare qualsiasi stringa, non solo una "linea", e $
sono usate per abbinare la fine della stringa.
Viene interpretato come il metacarattere di fine linea. Se vuoi abbinare un segno di dollaro reale, fallo
$ grep \\$
o
$ grep '\$'
echo \$
e poiecho \\$