Während der bash
Aspekt behandelt wurde, lässt Ihre Frage mich denken, dass Sie auf diese Variablen im perl
Code gestoßen sind.
$&
und $_
sind spezielle Variablen in perl
. Und sie sind besonders in perl
Code zu finden, der aus dem Shell-Code aufgerufen wird.
$_
ist die Standardvariable, an der viele perl
Funktionen 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 perl
Interpreter übergeben wird, ist es keine Shell-Variable. Dieses wörtliche Argument wird als perl
Ausdruck ( -e
) an übergeben perl
, und perl
es wird dafür als a interpretiert Variable).
$&
ist eine weitere spezielle perl
Variable, 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