Несмотря на то, что этот 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