Apa penggunaan $ & dalam bash?

10

Saya melihat parameter khusus di bash. Saya ingin tahu apa itu $&dan bagaimana bedanya $_.

Saya melihat output berikut ketika menjalankan perintah tetapi tidak dapat menemukan artinya juga.

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

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

Jawaban:

18

$&bukan variabel token / khusus tunggal, itu sederhana $dan &.

Perintah echo $&ini diperlakukan sebagai echo $ &, yang menggemakan literal $di latar belakang.

$_ di sisi lain adalah variabel khusus yang diperluas ke argumen terakhir dari perintah terbaru yang dieksekusi.

Tikar
sumber
5

Sementara bashaspek telah dibahas, pertanyaan Anda membuat saya berpikir Anda telah menemukan variabel-variabel dalam perlkode.

$&dan $_merupakan variabel khusus dalam perl. Dan mereka terutama ditemukan dalam perlkode yang dipanggil dari kode shell.

$_adalah variabel default yang digunakan banyak perlfungsi dan operator. Variabel itu juga merupakan variabel default yang ditetapkan oleh operator input.

Di:

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

Beberapa kode dijalankan untuk setiap baris beberapa input, dengan baris disimpan $_, dan konten $_dicetak setelah beberapa kode dijalankan.

The s/regex/replacement/Operator bekerja pada $_secara default. Jadi Anda sering menemukan hal-hal seperti:

perl -pe 's/foo/bar/'

Yang merupakan kependekan dari:

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

(di atas,, $_sejauh menyangkut shell hanyalah bagian dari argumen kata demi kata yang diteruskan ke perlpenerjemah, itu bukan variabel shell. Argumen kata demi kata tersebut dilewatkan sebagai perlekspresi ( -e) ke perl, dan untuk perlitu ditafsirkan sebagai variabel).

$&adalah perlvariabel khusus lain yang diperluas ke apa pun yang cocok dengan operator pencocokan terakhir ( m/.../, s/.../.../...).

Contohnya:

$ echo foo | perl -lne '
    print "The last character in $_ is $&" if m/.$/'
The last character in foo is o

Atau:

$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r
Stéphane Chazelas
sumber
1

Memberi &berarti Anda akan menjalankan perintah tertentu di backend atau sebagai pekerjaan. Jadi itulah yang dihasilkan dari echo $&memberi.

Dunky kolonial
sumber