Teks di antara backtick dieksekusi dan digantikan oleh output dari perintah (minus karakter garis belakang tertinggal, dan berhati-hatilah bahwa perilaku shell bervariasi ketika ada karakter NUL dalam output). Itu disebut substitusi perintah karena diganti dengan output dari perintah. Jadi jika Anda ingin mencetak 5, Anda tidak dapat menggunakan backticks, Anda dapat menggunakan tanda kutip, suka echo "$b"
atau hanya menjatuhkan kutipan dan gunakan echo $b
.
Seperti yang Anda lihat, karena $b
berisi 5, ketika menggunakan backticks bash
sedang mencoba menjalankan perintah 5
dan karena tidak ada perintah seperti itu, gagal dengan pesan kesalahan.
Untuk memahami cara kerja backticks, coba jalankan ini:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1
harus mencetak baris pertama /etc/passwd
file. Tapi karena kami menggunakan backticks, itu tidak mencetak ini di konsol. Sebaliknya itu disimpan dalam A
variabel. Anda dapat mengulangi $A
hal ini. Perhatikan bahwa cara mencetak baris pertama yang lebih efisien adalah dengan menggunakan perintah, head -n1 /etc/passwd
tetapi saya ingin menunjukkan bahwa ekspresi di dalam backticks tidak harus sederhana.
Jadi jika baris pertama dari / etc / passwd adalah root:x:0:0:root:/root:/bin/bash
, perintah pertama akan diganti secara dinamis dengan bash to A="root:x:0:0:root:/root:/bin/bash"
.
Perhatikan bahwa sintaks ini dari shell Bourne. Mengutip dan melarikan diri dengan cepat menjadi mimpi buruk dengan itu terutama ketika Anda mulai bersarang. Ksh memperkenalkan $(...)
alternatif yang sekarang distandarisasi ( POSIX ) dan didukung oleh semua shell (bahkan shell Bourne dari Unix v9). Jadi, Anda harus menggunakannya $(...)
sebagai gantinya saat ini kecuali Anda harus portabel untuk cangkang Bourne yang sangat tua.
Perhatikan juga bahwa output dari `...`
dan $(...)
tunduk pada pemisahan kata dan pembuatan nama file seperti halnya ekspansi variabel (dalam zsh, hanya pemisahan kata), jadi umumnya perlu dikutip dalam konteks daftar.