Qual é o uso de $ & no bash?

10

Eu estava olhando para parâmetros especiais no bash. Estou curioso para saber o que é $&e como é diferente $_.

Vejo a seguinte saída ao executar os comandos, mas também não consegui localizar o significado.

k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n

[1]+  Done                    echo $
k@Linux:~$ 
Kajal Sinha
fonte

Respostas:

18

$&não é um único token / variável especial, é simplesmente $e &.

O comando echo $&é tratado como echo $ &, que ecoa literalmente $em segundo plano.

$_ por outro lado, é uma variável especial que se expande para o último argumento do comando mais recente executado.

Esteira
fonte
5

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
Stéphane Chazelas
fonte
1

Fornecer &significa que você executará um comando específico no back-end ou como um trabalho. Então é isso que a saída de echo $&dá.

Colonial Dunky
fonte