Bien que l' bashaspect ait été couvert, votre question me fait penser que vous avez rencontré ces variables dans le perlcode.
$&et $_sont des variables spéciales dans perl. Et ils se trouvent surtout dans le perlcode appelé depuis le code shell.
$_est la variable par défaut sur laquelle de nombreuses perlfonctions et opérateurs travaillent. Cette variable est également la variable par défaut définie par les opérateurs d'entrée.
Dans:
perl -pe 'some-code' < some-input
Some-code est exécuté pour chaque ligne de some-input, avec la ligne stockée dans $_, et le contenu du $_est imprimé après l'exécution de some-code.
L' s/regex/replacement/opérateur fonctionne $_par défaut. Vous trouvez donc souvent des choses comme:
perl -pe 's/foo/bar/'
Ce qui est l'abréviation de:
perl -pe '$_ =~ s/foo/bar/'
(ci-dessus, $_en ce qui concerne le shell n'est qu'une partie d'un argument verbatim passé à l' perlinterpréteur, ce n'est pas une variable shell. Cet argument verbatim est passé en tant perlqu'expression ( -e) à perl, et c'est pour perlcela qu'il est interprété comme un variable).
$&est une autre perlvariable spéciale qui s'étend à tout ce qui a été mis en correspondance par le dernier opérateur de mise en correspondance ( m/.../, s/.../.../...).
Par exemple:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Ou:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r