การใช้ $ & in bash คืออะไร


10

ฉันกำลังมองหาพารามิเตอร์พิเศษในทุบตี ฉันอยากรู้ว่าอะไรคืออะไร$&และแตกต่าง$_อย่างไร

ฉันเห็นผลลัพธ์ต่อไปนี้เมื่อรันคำสั่ง แต่ไม่สามารถค้นหาความหมายได้เช่นกัน

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

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

คำตอบ:


18

$&ไม่ได้เป็นโทเค็นตัวแปรเดียว / พิเศษก็เป็นเพียงและ$&

คำสั่งecho $&จะถือเป็นecho $ &ซึ่งสะท้อนตัวอักษร$ในพื้นหลัง

$_ ในทางตรงกันข้ามเป็นตัวแปรพิเศษที่ขยายไปยังอาร์กิวเมนต์สุดท้ายของคำสั่งล่าสุดที่ดำเนินการ


5

ในขณะที่bashครอบคลุมมุมมองคำถามของคุณทำให้ฉันคิดว่าคุณได้เจอตัวแปรเหล่านั้นในperlรหัส

$&และเป็นตัวแปรที่พิเศษใน$_ perlและพบได้ในperlรหัสที่เรียกจากรหัสเชลล์

$_เป็นตัวแปรเริ่มต้นperlฟังก์ชั่นและตัวดำเนินการหลายอย่าง ตัวแปรนั้นเป็นตัวแปรเริ่มต้นที่กำหนดโดยตัวดำเนินการอินพุต

ใน:

perl -pe 'some-code' < some-input

มีการเรียกใช้โค้ดบางรหัสสำหรับทุกบรรทัดของอินพุตโดยที่บรรทัดนั้นถูกเก็บไว้$_และเนื้อหาของ$_จะถูกพิมพ์หลังจากรันโค้ดบางตัวแล้ว

s/regex/replacement/ประกอบการทำงานบน$_โดยค่าเริ่มต้น ดังนั้นคุณมักจะพบสิ่งต่าง ๆ เช่น:

perl -pe 's/foo/bar/'

ซึ่งสั้นสำหรับ:

perl -pe '$_ =~ s/foo/bar/'

(ด้านบน, $_เท่าที่เชลล์เกี่ยวข้องเป็นเพียงส่วนหนึ่งของอาร์กิวเมนต์ verbatim ที่ส่งไปยังperlinterpreter, มันไม่ใช่ตัวแปร shell. อาร์กิวเมนต์ verbatim นั้นถูกส่งผ่านเป็นperlexpression ( -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

1

การให้&หมายความว่าคุณกำลังจะเรียกใช้คำสั่งเฉพาะในแบ็กเอนด์หรือเป็นงาน นั่นคือสิ่งที่ผลลัพธ์ของการecho $&ให้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.