Chociaż bash
aspekt został omówiony, twoje pytanie sprawia, że myślę, że natrafiłeś na te zmienne w perl
kodzie.
$&
i $_
są specjalnymi zmiennymi w perl
. I są szczególnie widoczne w perl
kodzie wywoływanym z kodu powłoki.
$_
jest zmienną domyślną, perl
nad 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 perl
interpreterowi, nie jest to zmienna powłoki. Ten dosłowny argument jest przekazywany jako perl
wyrażenie ( -e
) do perl
, i perl
dlatego jest interpretowany jako zmienna).
$&
jest kolejną specjalną perl
zmienną, 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