Adakah alasan untuk menggunakan atau mengajarkan substitusi `...` untuk pengembangan baru?

16

Ini adalah pemahaman saya bahwa $(...)sintaks substitusi perintah yang lebih modern lebih disukai daripada `sintaks berbasis lama , karena lebih mudah dan lebih sedikit rawan kesalahan bersarang dan lolos sintaksis.

Selanjutnya, tampaknya sebagian besar /bin/shkerang bergaya dalam dukungan penggunaan modern $(…):

  • pesta
  • ash (dan karena itu BusyBox, jadi kebanyakan embedded Linux)
  • berlari
  • FreeBSD / bin / sh

Dan $(…)ditentukan oleh IEEE 1003.1.

Jadi saya punya 2 pertanyaan yang sangat terkait:

  • Apakah ada alasan untuk menggunakan `dalam pengembangan skrip shell baru kecuali Anda mengetahui sistem lama tertentu yang harus dijalankan skrip?
  • Apakah ada alasan untuk tidak mengajar siswa pemrograman UNIX hanya untuk menulis $(...), dan membahas `hanya sebagai varian usang yang kemungkinan akan mereka temui jika mereka membaca skrip shell pengembang lain (dan mungkin perlu jika mereka bekerja dengan sistem yang benar-benar tua atau tidak standar) untuk beberapa alasan)?
Michael Ekstrand
sumber
7
Tidak, tidak ada gunanya menggunakan atau mengajar `...`. Itu ada untuk portabilitas mundur dengan shell Bourne saja (seperti shell Bourne miliki ^(sama seperti |) untuk portabilitas mundur dengan shell Thomson). Namun perhatikan bahwa (t)cshtidak ada $(...)(tetapi tidak ada gunanya menggunakan atau mengajar mereka juga).
Stéphane Chazelas
2
Itu hal Groucho Marx `; {)
goldilocks
2
Tunggu, backticks sudah usang ?? Apakah ada yang punya referensi kanonik yang menjelaskan mengapa? (Karakter sintaks yang aneh sangat sulit dicari.)
MathematicalOrchid
1
Lebih mudah diketik. `` - 2 tombol ditekan; $()- shift + 4,9, shift + 0 - 5 penekanan tombol;
Vi.
3
@MathematicalOrchid stackoverflow.com/questions/9405478/… tampaknya cukup bagus. Backticks sangat sulit untuk bersarang dengan benar, terutama ketika ada tambahan harga yang terlibat.
Michael Ekstrand

Jawaban:

19

Karena back-ticks sering digunakan, masuk akal untuk mengajarkan konstruksi sintaksis ini.

Tentu saja, $()substitusi perintah gaya harus ditekankan sebagai gaya default (dan konstruksi penyesuai standar).

Mengapa back-ticks masih populer? Karena mereka menghemat satu karakter dalam mengetik, dan mereka bisa dibilang kurang berat di mata.

maxschlepzig
sumber
18
Saya tidak akan menggambarkan "kurang berat pada mata" sebagai fitur, tetapi bug ...
jasonwryan
1
Biasanya saya menggunakan backsticks dalam kasus sederhana, dan $ () dalam kasus kompleks. Tetapi sangat banyak skrip yang menggunakan backsticks sampai sekarang, dan lulusannya harus dapat menggunakannya.
peterh
@jasonwryan Dalam hal ini bug bukan karena singkatnya, tetapi masalah sewenang-wenang. Yaitu, menggunakan tanda kutip mundur adalah lebih mudah pada mata, tapi itu tidak mengapa hal itu disusutkan. Kecuali Anda mencoba mengatakan gula secara definisi buruk dan kita semua harus memilih ASM untuk apa pun ... Sebenarnya saya suka tampilan yang $()lebih baik tetapi backticks lebih mudah dan lebih banyak KISS; bisa menjadi konsekuensi OCDish pavlovia dari pemrograman umum.
goldilocks
@goldilocks setelah Anda bertambah tua, keterbacaan menjadi jauh lebih sulit: backticks praktis tidak terlihat dalam kode di usia saya ...
jasonwryan
3
Pada keyboard Perancis misalnya, `adalah Altrg + è, (canggung untuk jenis), sementara $, (, )tidak perlu pengubah apapun.
Stéphane Chazelas
5

Saya tidak akan menggunakannya untuk pemrograman, dan mengajarkan penggunaan substitusi backtick dalam skrip shell sebagai usang adalah baik-baik saja (ini tampaknya menjadi konsensus). Saya tidak berpikir mereka secara inheren jahat, namun, (dan setidaknya berdasarkan penilaian rata-rata tutorial Anda ke Linux command line), mereka masih sering digunakan dalam snippet / one-liner sederhana di mana mereka mungkin tidak akan disarangkan dan hal-hal yang Anda Hanya akan dilakukan sekali.

Lihat Substitusi Perintah: backticks atau tanda dolar / paren terlampir? .

jaymmer - Pasang kembali Monica
sumber
1

Saya menghindari penggunaan $()konstruk karena tidak portabel - di dunia nyata. Anda telah mendaftarkan empat cangkang - ada banyak variasi lebih banyak dari itu di sekitar (urutan besarnya?). Coba jalankan skrip Anda di Solaris / bin / sh dan lihat bagaimana hasilnya.

Di sisi lain, kapan Anda berhenti mendukung sistem lama? tidak bisakah Anda maju ke cara-cara baru dalam melakukan sesuatu? Saya rasa Anda harus memercayai penilaian Anda sendiri, dan jika Anda dapat melihat keuntungan pasti dari cara baru di atas yang lama, maka lakukanlah ... ini bukan salah satu dari mereka (secara pribadi saya menemukan bactick lebih jelas - mereka tidak dapat bingung dengan substitusi variabel shell, yang merupakan hal yang berbeda)

Murray Jensen
sumber
1
POSIX tidak menentukan yang /bin/shharus sesuai. Solaris /bin/shmemang sangat tidak sesuai - meskipun Solaris 9/10 / ... secara resmi kompatibel dengan POSIX. The $()hanyalah salah satu konstruksi itu tidak mengerti. Tetapi ada banyak lagi yang tidak dimengerti atau ditafsirkan berbeda. Cara portabel untuk mendapatkan penyesuaian shuntuk mencarinya di jalur yang dikembalikan oleh getconf PATH.
maxschlepzig