Mặc dù bash
khí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 perl
mã.
$&
và $_
là các biến đặc biệt trong perl
. Và chúng đặc biệt được tìm thấy trong perl
mã được gọi từ mã shell.
$_
là biến mặc định mà nhiều perl
hà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 perl
thô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ư perl
biểu thức ( -e
) để perl
, và nó cho perl
rằng nó được hiểu như là một Biến đổi).
$&
là một perl
biế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