Embora o bash
aspecto tenha sido abordado, sua pergunta me faz pensar que você encontrou essas variáveis no perl
código.
$&
e $_
são variáveis especiais em perl
. E eles são encontrados especialmente no perl
código chamado do código do shell.
$_
é a variável padrão em que muitas perl
funçõ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 perl
intérprete, não é uma variável do shell. Esse argumento literal é transmitido como perl
expressão ( -e
) para perl
, e é para perl
isso que ele é interpretado como um variável).
$&
é outra perl
variá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