Qual è l'uso di $ & in bash?


10

Stavo cercando parametri speciali in bash. Sono curioso di sapere cosa sia $&e come sia diverso $_.

Vedo il seguente output quando eseguo i comandi ma non riesco a localizzarne il significato.

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

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

Risposte:


18

$&non è un singolo token / variabile speciale, è semplicemente $e &.

Il comando echo $&viene trattato come echo $ &, che riecheggia letteralmente $in background.

$_ d'altra parte è una variabile speciale che si espande fino all'ultimo argomento del comando più recente eseguito.


5

Mentre l' bashaspetto è stato trattato, la tua domanda mi fa pensare che hai trovato quelle variabili nel perlcodice.

$&e $_sono variabili speciali in perl. E si trovano soprattutto nel perlcodice chiamato dal codice shell.

$_è la variabile predefinita perlsu cui lavorano molte funzioni e operatori. Quella variabile è anche la variabile predefinita impostata dagli operatori di input.

In:

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

Some-code viene eseguito per ogni riga di some-input, con la riga memorizzata in $_, e il contenuto di $_viene stampato dopo l'esecuzione di some-code.

L' s/regex/replacement/operatore lavora $_di default. Quindi spesso trovi cose come:

perl -pe 's/foo/bar/'

Che è l'abbreviazione di:

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

(sopra, per $_quanto riguarda la shell è solo una parte di un argomento testuale trasmesso perlall'interprete, non è una variabile di shell. Tale argomento testuale viene passato come perlespressione ( -e) a perl, ed è per perlquesto che viene interpretato come un variabile).

$&è un'altra perlvariabile speciale che si espande a tutto ciò che è stato abbinato dall'ultimo operatore corrispondente ( m/.../, s/.../.../...).

Per esempio:

$ 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

1

Fornire &significa che eseguirai un comando particolare nel back-end o come lavoro. Questo è ciò che echo $&dà l'output di .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.