GNU/Linux >> Belajar Linux >  >> Linux

Apakah Backticks (yaitu `cmd`) Di *sh Shells Sudah Tidak Digunakan Lagi?

Saya telah melihat komentar ini berkali-kali di Unix &Linux serta di situs lain yang menggunakan frasa “backticks telah ditinggalkan”, sehubungan dengan shell seperti Bash &Zsh.

Apakah pernyataan ini benar atau salah?

Jawaban yang Diterima:

Ada dua arti yang berbeda dari "usang".

tidak digunakan lagi: (terutama fitur perangkat lunak) dapat digunakan tetapi dianggap usang dan sebaiknya dihindari, biasanya karena telah digantikan.

—Kamus Oxford Amerika Baru

Dengan definisi ini backtick adalah tidak digunakan lagi.

Status yang tidak digunakan lagi mungkin juga menunjukkan bahwa fitur tersebut akan dihapus di masa mendatang.

—Wikipedia

Menurut definisi ini, backtick adalah bukan tidak digunakan lagi.

Masih didukung:

Mengutip Spesifikasi Open Group pada Bahasa Perintah Shell,
khususnya bagian “2.6.3 Substitusi Perintah”, dapat dilihat bahwa kedua bentuk substitusi perintah, backticks (`..cmd..` ) atau parens dolar ($(..cmd..) ) masih didukung sejauh spesifikasi berjalan.

kutipan

Substitusi perintah memungkinkan output dari suatu perintah diganti di tempat
dari nama perintah itu sendiri. Substitusi perintah akan terjadi ketika perintah
diapit sebagai berikut:

          $(command)

          or (backquoted version):

          `command`

Shell akan memperluas substitusi perintah dengan menjalankan perintah di lingkungan subkulit
(lihat Lingkungan Eksekusi Shell) dan mengganti substitusi perintah
(teks perintah ditambah $() atau
backquotes) dengan output standar dari perintah, menghapus urutan satu
atau lebih karakter di akhir substitusi. Karakter yang disematkan sebelum akhir keluaran tidak boleh dihapus; namun,
mereka dapat diperlakukan sebagai pembatas bidang dan dihilangkan selama pemisahan bidang,
tergantung pada nilai IFS dan kutipan yang berlaku. Jika keluaran
berisi byte nol, perilaku tidak ditentukan.

Dalam gaya substitusi perintah backquoted, akan mempertahankan
arti literalnya, kecuali jika diikuti oleh:‘$’, ‘` ‘, atau . Pencarian
untuk backquote yang cocok akan dipenuhi oleh backquote pertama yang tidak diberi tanda kutip
yang tidak di-escape; selama pencarian ini, jika backquote yang tidak lolos
ditemukan dalam komentar shell, dokumen di sini, perintah yang disematkan
substitusi dari $(command) bentuk, atau string yang dikutip, hasil yang tidak ditentukan
terjadi. String dengan tanda kutip tunggal atau tanda kutip ganda yang dimulai, tetapi tidak diakhiri,
dalam “`...` ” urutan menghasilkan hasil yang tidak ditentukan.

Dengan $(command) form, semua karakter yang mengikuti tanda kurung buka ke
tanda kurung tutup yang cocok merupakan perintah. Skrip
shell yang valid dapat digunakan untuk perintah, kecuali skrip yang hanya terdiri dari
re-direction yang menghasilkan hasil yang tidak ditentukan.

Lalu mengapa semua orang mengatakan bahwa backtick tidak digunakan lagi?

Karena sebagian besar kasus penggunaan harus memanfaatkan bentuk parens dolar alih-alih backticks. (Tidak digunakan lagi dalam pengertian pertama di atas.) Banyak situs yang paling bereputasi (termasuk U&L) sering menyatakan ini juga, secara keseluruhan, jadi ini adalah saran yang bagus. Saran ini tidak boleh disamakan dengan beberapa rencana yang tidak ada untuk menghapus dukungan untuk backtick dari shell.

  • BashFAQ #082 – Mengapa $(…) lebih disukai daripada `…` (backticks)?

    kutipan

    `...` adalah sintaks lawas yang hanya dibutuhkan oleh
    bourne-shell yang paling lama yang tidak kompatibel dengan POSIX. Ada beberapa alasan untuk selalu
    memilih $(...) sintaks:

  • Bash Hackers Wiki – Sintaks usang dan tidak digunakan lagi

    kutipan

    Ini adalah bentuk substitusi perintah lama yang kompatibel dengan Bourne.
    Keduanya `COMMANDS` dan $(COMMANDS) sintaks ditentukan oleh POSIX,
    tetapi yang terakhir sangat lebih disukai, meskipun yang pertama sayangnya
    masih sangat umum di skrip. Penggantian perintah gaya baru secara luas
    diimplementasikan oleh setiap shell modern (dan kemudian beberapa). Satu-satunya alasan untuk menggunakan
    backtick adalah untuk kompatibilitas dengan shell Bourne asli (seperti Heirloom).
    Penggantian perintah Backtick memerlukan pelolosan khusus saat bersarang, dan
    contoh yang ditemukan di alam liar dikutip secara tidak tepat sering daripada tidak. Lihat:Mengapa $(…) lebih disukai daripada `…` (backticks)?.

  • Dasar pemikiran standar POSIX

    kutipan

    Karena perilaku yang tidak konsisten ini, variasi substitusi perintah backquoted tidak disarankan untuk aplikasi baru yang menyarangkan substitusi perintah atau mencoba menyematkan skrip kompleks.

CATATAN: Kutipan ketiga ini (di atas) selanjutnya menunjukkan beberapa situasi di mana backticks tidak akan bekerja, tetapi metode parens dolar yang lebih baru melakukannya, dimulai dengan paragraf berikut:

Selain itu, sintaks backquoted memiliki batasan historis pada konten perintah yang disematkan. Meskipun formulir “$()” yang lebih baru dapat memproses semua jenis skrip tersemat yang valid, formulir kutipan-balik tidak dapat menangani beberapa skrip valid yang menyertakan kutipan-balik.

Jika Anda melanjutkan membaca bagian tersebut, kegagalan akan disorot yang menunjukkan bagaimana kegagalan tersebut akan gagal menggunakan backticks, tetapi berhasil menggunakan notasi parens dolar yang lebih baru.

Terkait:Bagaimana memposisikan tangan Anda untuk menekan tombol Command (cmd) + Option (alt)?

Kesimpulan

Jadi, sebaiknya Anda menggunakan parens dolar daripada backticks, tetapi Anda sebenarnya tidak menggunakan sesuatu yang secara teknis "tidak digunakan lagi" seperti dalam "ini akan berhenti berfungsi sepenuhnya pada titik yang direncanakan".

Setelah membaca semua ini, Anda harus memahami bahwa Anda sangat dianjurkan untuk menggunakan parens dolar kecuali Anda secara khusus memerlukan kompatibilitas dengan shell Bourne non-POSIX asli yang asli.


Linux
  1. Bagaimana Cara Menggunakan Command Coproc Di Berbagai Shell?

  2. Mendapatkan Semua File Yang Telah Dimodifikasi Pada Tanggal Tertentu?

  3. Shell mana yang tidak mendukung ekspansi tanda kurung dolar, dan meminta backtick?

  1. Bagaimana Agar Type-ahead Terapkan Ke Bash History Search (ctrl-r)?

  2. Bagaimana agar perintah ls Linux menunjukkan stempel waktu kedua

  3. Apakah bash memiliki perintah warna, seperti yang terlihat di MS-Windows CMD?

  1. Bagaimana Mendaftar Semua File Yang Telah Diinstal Oleh Paket Apt?

  2. Substitusi Perintah Menggunakan “?

  3. Contoh membuat alias perintah di shell yang berbeda