Was ist die Verwendung von $ & in Bash?

10

Ich habe spezielle Parameter in Bash untersucht. Ich bin gespannt, was ist $&und wie es sich unterscheidet $_.

Ich sehe die folgende Ausgabe, wenn ich die Befehle ausführe, konnte aber auch die Bedeutung nicht finden.

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

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

Antworten:

18

$&ist kein einzelnes Token / keine spezielle Variable, sondern einfach $und &.

Der Befehl echo $&wird wie folgt behandelt echo $ &, der $im Hintergrund ein Literal wiedergibt .

$_ Andererseits handelt es sich um eine spezielle Variable, die bis zum letzten Argument des zuletzt ausgeführten Befehls erweitert wird.

Matte
quelle
5

Während der bashAspekt behandelt wurde, lässt Ihre Frage mich denken, dass Sie auf diese Variablen im perlCode gestoßen sind.

$&und $_sind spezielle Variablen in perl. Und sie sind besonders in perlCode zu finden, der aus dem Shell-Code aufgerufen wird.

$_ist die Standardvariable, an der viele perlFunktionen und Operatoren arbeiten. Diese Variable ist auch die Standardvariable, die von Eingabeoperatoren festgelegt wird.

Im:

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

Some-Code wird für jede Zeile einer Eingabe ausgeführt, wobei die Zeile darin gespeichert ist $_, und der Inhalt von $_wird gedruckt, nachdem Some-Code ausgeführt wurde.

Der s/regex/replacement/Operator arbeitet $_standardmäßig weiter. So finden Sie oft Dinge wie:

perl -pe 's/foo/bar/'

Welches ist die Abkürzung für:

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

(oben, $_soweit die Shell nur ein Teil eines wörtlichen Arguments ist, das an den perlInterpreter übergeben wird, ist es keine Shell-Variable. Dieses wörtliche Argument wird als perlAusdruck ( -e) an übergeben perl, und perles wird dafür als a interpretiert Variable).

$&ist eine weitere spezielle perlVariable, die auf das erweitert wird, was vom letzten Übereinstimmungsoperator ( m/.../, s/.../.../...) abgeglichen wurde .

Zum Beispiel:

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

Oder:

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

Bereitstellen &bedeutet, dass Sie einen bestimmten Befehl im Backend oder als Job ausführen. Das ist es also, was die Ausgabe von echo $&gibt.

Colonial Dunky
quelle