Qual é o uso de $ & em bash?

9

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

Eu 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:~$ 
    
por Kajal Sinha 16.08.2014 / 15:00

3 respostas

17

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

O comando echo $& é tratado como echo $ & , que representa um literal $ no plano de fundo.

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

    
por 16.08.2014 / 15:11
3

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
    
por 16.08.2014 / 22:34
1

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

    
por 16.08.2014 / 15:17

Tags