Việc sử dụng $ & trong bash là gì?


10

Tôi đã xem xét các thông số đặc biệt trong bash. Tôi tò mò muốn biết nó là gì $&và nó khác với như thế nào $_.

Tôi thấy đầu ra sau đây khi chạy các lệnh nhưng cũng không thể xác định được ý nghĩa.

k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n

[1]+  Done                    echo $
k@Linux:~$ 

Câu trả lời:


18

$&không phải là một mã thông báo / biến đặc biệt, nó chỉ đơn giản $&.

Lệnh echo $&được coi là echo $ &, mà vang một chữ $trong nền.

$_ mặt khác là một biến đặc biệt mở rộng đến đối số cuối cùng của lệnh gần đây nhất được thực thi.


5

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ã.

$&$_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

1

Cung cấp &có nghĩa là bạn sẽ chạy một lệnh cụ thể trong phần phụ trợ hoặc như một công việc. Vì vậy, đó là những gì đầu ra của echo $&cho.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.