Embora o aspecto bash
tenha sido coberto, sua pergunta me faz pensar que você encontrou essas variáveis em perl
code.
$&
e $_
são variáveis especiais em perl
. E eles são encontrados especialmente no código perl
chamado a partir do código do shell.
$_
é a variável padrão em que muitas funções perl
e operadores trabalham. Essa variável também é a variável padrão definida pelos operadores de entrada.
Em:
perl -pe 'some-code' < some-input
Algum código é executado para cada linha de alguma entrada, com a linha armazenada em $_
, e o conteúdo do $_
é impresso após a execução de algum código.
O operador s/regex/replacement/
trabalha com $_
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 textual transmitido ao interpretador perl
, não é uma variável shell. Esse argumento textual é passado como perl
expression ( -e
) para perl
, e é para perl
que é interpretado como uma variável).
$&
é outra variável perl
especial que se expande para o que foi correspondido pelo último operador correspondente ( m/.../
, s/.../.../
...).
Por exemplo:
$ echo foo | perl -lne '
print "$_'s last character is $&" if m/.$/'
foo's last character is o
Ou:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r