Mentre l' bashaspetto è stato trattato, la tua domanda mi fa pensare che hai trovato quelle variabili nel perlcodice.
$&e $_sono variabili speciali in perl. E si trovano soprattutto nel perlcodice chiamato dal codice shell.
$_è la variabile predefinita perlsu cui lavorano molte funzioni e operatori. Quella variabile è anche la variabile predefinita impostata dagli operatori di input.
In:
perl -pe 'some-code' < some-input
Some-code viene eseguito per ogni riga di some-input, con la riga memorizzata in $_, e il contenuto di $_viene stampato dopo l'esecuzione di some-code.
L' s/regex/replacement/operatore lavora $_di default. Quindi spesso trovi cose come:
perl -pe 's/foo/bar/'
Che è l'abbreviazione di:
perl -pe '$_ =~ s/foo/bar/'
(sopra, per $_quanto riguarda la shell è solo una parte di un argomento testuale trasmesso perlall'interprete, non è una variabile di shell. Tale argomento testuale viene passato come perlespressione ( -e) a perl, ed è per perlquesto che viene interpretato come un variabile).
$&è un'altra perlvariabile speciale che si espande a tutto ciò che è stato abbinato dall'ultimo operatore corrispondente ( m/.../, s/.../.../...).
Per esempio:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
O:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r