Несмотря на то, что этот bashаспект был рассмотрен, ваш вопрос заставляет меня думать, что вы встретили эти переменные в perlкоде.
$&и $_специальные переменные в perl. И они особенно найдены в perlкоде, вызванном из кода оболочки.
$_является переменной по умолчанию, над которой perlработают многие функции и операторы. Эта переменная также является переменной по умолчанию, установленной операторами ввода.
В:
perl -pe 'some-code' < some-input
Some-код запускается для каждой строки некоторого ввода, где строка сохраняется $_, а содержимое $_печатается после выполнения some-кода.
s/regex/replacement/Оператор работает по $_умолчанию. Поэтому вы часто находите такие вещи, как:
perl -pe 's/foo/bar/'
Что сокращенно от:
perl -pe '$_ =~ s/foo/bar/'
(выше, $_что касается оболочки , это только часть дословного аргумента, передаваемого perlинтерпретатору, это не переменная оболочки. Этот дословный аргумент передается как perlвыражение ( -e) в perl, и для perlэтого он интерпретируется как переменная).
$&это еще одна специальная perlпеременная, которая расширяется до того, что было сопоставлено последним оператором сопоставления ( m/.../, s/.../.../...).
Например:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Или:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r