¿Cuál es el uso de $ & en bash?

10

Estaba buscando parámetros especiales en bash. Tengo curiosidad por saber qué es $&y cómo es diferente $_.

Veo el siguiente resultado cuando ejecuto los comandos pero no pude localizar el significado también.

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

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

Respuestas:

18

$&no es un token / variable especial, es simple $y &.

El comando echo $&se trata como echo $ &un eco $en segundo plano.

$_ Por otro lado, hay una variable especial que se expande hasta el último argumento del comando más reciente ejecutado.

Estera
fuente
5

Si bien el bashaspecto se ha cubierto, su pregunta me hace pensar que ha encontrado esas variables en el perlcódigo.

$&y $_son variables especiales en perl. Y se encuentran especialmente en el perlcódigo llamado desde el código de shell.

$_es la variable predeterminada en la perlque trabajan muchas funciones y operadores. Esa variable también es la variable predeterminada establecida por los operadores de entrada.

En:

perl -pe 'some-code' < some-input

Se ejecuta algún código para cada línea de alguna entrada, con la línea almacenada $_y el contenido del $_se imprime después de que se haya ejecutado algún código.

El s/regex/replacement/operador trabaja $_de manera predeterminada. Entonces a menudo encuentras cosas como:

perl -pe 's/foo/bar/'

Que es la abreviatura de:

perl -pe '$_ =~ s/foo/bar/'

(arriba, $_en lo que respecta al shell es solo parte de un argumento literal pasado al perlintérprete, no es una variable de shell. Ese argumento literal se pasa como perlexpresión ( -e) a perl, y es por perleso que se interpreta como un variable).

$&es otra perlvariable especial que se expande a lo que coincida con el último operador coincidente ( m/.../, s/.../.../...).

Por ejemplo:

$ echo foo | perl -lne '
    print "The last character in $_ is $&" if m/.$/'
The last character in foo is o

O:

$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r
Stéphane Chazelas
fuente
1

Proporcionar &significa que va a ejecutar un comando particular en el backend o como un trabajo. Entonces eso es lo que da la salida de echo $&.

Dunky colonial
fuente