Mặc dù bashkhía cạnh đã được đề cập, câu hỏi của bạn khiến tôi nghĩ rằng bạn đã gặp các biến đó trong perlmã.
$&và $_là các biến đặc biệt trong perl. Và chúng đặc biệt được tìm thấy trong perlmã được gọi từ mã shell.
$_là biến mặc định mà nhiều perlhàm và toán tử làm việc trên. Biến đó cũng là biến mặc định được đặt bởi các toán tử đầu vào.
Trong:
perl -pe 'some-code' < some-input
Một số mã được chạy cho mỗi dòng của một số đầu vào, với dòng được lưu trữ $_và nội dung của mã $_được in sau khi một số mã đã chạy.
Các s/regex/replacement/nhà điều hành hoạt động trên $_theo mặc định. Vì vậy, bạn thường tìm thấy những thứ như:
perl -pe 's/foo/bar/'
Đó là viết tắt của:
perl -pe '$_ =~ s/foo/bar/'
(ở trên, $_như xa như các vỏ là có liên quan chỉ là một phần của một cuộc tranh luận đúng nguyên văn truyền cho perlthông dịch viên, nó không phải là một biến vỏ. Đó là lập luận đúng nguyên văn được truyền như perlbiểu thức ( -e) để perl, và nó cho perlrằng nó được hiểu như là một Biến đổi).
$&là một perlbiến đặc biệt khác mở rộng thành bất cứ thứ gì được khớp bởi toán tử khớp cuối cùng ( m/.../, s/.../.../...).
Ví dụ:
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
Hoặc là:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r