Chociaż bashaspekt został omówiony, twoje pytanie sprawia, że myślę, że natrafiłeś na te zmienne w perlkodzie.
$&i $_są specjalnymi zmiennymi w perl. I są szczególnie widoczne w perlkodzie wywoływanym z kodu powłoki.
$_jest zmienną domyślną, perlnad którą pracuje wiele funkcji i operatorów. Ta zmienna jest również zmienną domyślną ustawianą przez operatory wejściowe.
W:
perl -pe 'some-code' < some-input
Część kodu jest uruchamiana dla każdego wiersza niektórych danych wejściowych, z wierszem zapisanym $_, a treść $_jest drukowana po uruchomieniu jakiegoś kodu.
s/regex/replacement/Operator działa na $_domyślnie. Więc często znajdziesz takie rzeczy jak:
perl -pe 's/foo/bar/'
Co jest skrótem od:
perl -pe '$_ =~ s/foo/bar/'
(powyżej, $_jeśli chodzi o powłokę , to tylko część dosłownego argumentu przekazanego perlinterpreterowi, nie jest to zmienna powłoki. Ten dosłowny argument jest przekazywany jako perlwyrażenie ( -e) do perl, i perldlatego jest interpretowany jako zmienna).
$&jest kolejną specjalną perlzmienną, która rozwija się do wszystkiego, co zostało dopasowane przez ostatni pasujący operator ( m/.../, s/.../.../...).
Na przykład:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Lub:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r