Embora o bashaspecto tenha sido abordado, sua pergunta me faz pensar que você encontrou essas variáveis no perlcódigo.
$&e $_são variáveis especiais em perl. E eles são encontrados especialmente no perlcódigo chamado do código do shell.
$_é a variável padrão em que muitas perlfunções e operadores trabalham. Essa variável também é a variável padrão definida pelos operadores de entrada.
No:
perl -pe 'some-code' < some-input
Algum código é executado para cada linha de alguma entrada, com a linha armazenada $_e o conteúdo da $_é impresso após a execução de algum código.
O s/regex/replacement/operador trabalha $_por padrão. Então você costuma encontrar coisas como:
perl -pe 's/foo/bar/'
Qual é a abreviação de:
perl -pe '$_ =~ s/foo/bar/'
(acima, no $_que diz respeito ao shell, é apenas parte de um argumento literal transmitido ao perlintérprete, não é uma variável do shell. Esse argumento literal é transmitido como perlexpressão ( -e) para perl, e é para perlisso que ele é interpretado como um variável).
$&é outra perlvariável especial que se expande para o que foi correspondido pelo último operador correspondente ( m/.../, s/.../.../...).
Por exemplo:
$ 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