GNU/Linux >> Belajar Linux >  >> Linux

Sintaks Deklarasi Substitusi Perintah Di Bash – Manakah dari Dua Ini yang Lebih Baik Praktiknya??

Pertanyaan ini sudah memiliki jawaban di sini :Apa perbedaan antara $(stuff) dan `stuff`?

(6 jawaban)
Tutup 6 tahun yang lalu.

Ini adalah bagian dari bash find loop, dan saya bertanya-tanya sintaks mana yang lebih benar dan mengapa?

filename="$(echo "$i" | cut -c5-)";
filename=`echo "$i" | cut -c5-`;

Keduanya berfungsi untuk tujuan mendapatkan nama file.

Jawaban yang Diterima:

Manual Bash mencatat bahwa:

Bentuk POSIX $() dari substitusi perintah diimplementasikan (lihat Substitusi Perintah), dan lebih disukai daripada " shell Bourne (yang juga diimplementasikan untuk kompatibilitas mundur).

Jadi $(...) lebih disukai daripada `...` dalam hal baru dan spesifik Bash yang Anda tulis¹. Substitusi backtick tidak bersarang dengan baik (Anda harus menghindarinya), dan memiliki beberapa perilaku mengutip yang sedikit aneh. Anda dapat membuat sarang $(... $(...) ...) sewenang-wenang banyak tanpa masalah. Manual tersebut menjelaskan perilaku keduanya sebagai:

Ketika bentuk substitusi backquote gaya lama digunakan, garis miring terbalik mempertahankan arti literalnya kecuali jika diikuti oleh '$', ''`', atau ''. Kutipan balik pertama yang tidak didahului oleh garis miring terbalik mengakhiri substitusi perintah. Saat menggunakan formulir $(command), semua karakter di antara tanda kurung membentuk perintah; tidak ada yang diperlakukan secara khusus.

Biasanya dianggap sebagai praktik terbaik untuk mengutip semua perluasan string untuk menghindari masalah pemisahan kata, termasuk di tempat yang tidak benar-benar diperlukan, jadi "$(...)" juga latihan yang lebih baik di sini.

Terakhir, dua bagian yang relevan dari halaman wooledge yang sama:

  • Ini juga saatnya Anda melupakan `...` . Itu tidak konsisten dengan sintaks Ekspansi dan sangat sulit untuk bersarang tanpa dosis obat penghilang rasa sakit. Gunakan $(...) sebagai gantinya.
  • Dan demi Tuhan, "Gunakan lebih banyak kutipan!" Lindungi string dan ekspansi parameter Anda dari pemisahan kata. Pemisahan kata akan memakan bayi Anda jika Anda tidak mengutip dengan benar.

Sebenarnya, bahkan dalam POSIX sh skrip, ini dianggap sebagai praktik terbaik. Masih ada cangkang yang lebih lemah, tetapi Anda akan tahu jika Anda akan menghadapinya.


Linux
  1. Terminal mana yang lebih baik:Bash vs Zsh

  2. Mengutip Dalam $(Pergantian perintah) Di Bash?

  3. Substitusi Perintah Menggunakan “?

  1. perintah ekspor bash

  2. Keluar dari kode penugasan variabel ke substitusi perintah di Bash

  3. Jalankan perintah bash pada pipa jenkins

  1. Dua kegunaan hebat untuk perintah cp:pintasan Bash

  2. Sintaks Shell/bash ini:Somevariable=somevalue Somecommand?

  3. Bash Mana yang Dieksekusi?