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