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/sh
kerang 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)?
shell
command-substitution
Michael Ekstrand
sumber
sumber
`...`
. 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)csh
tidak ada$(...)
(tetapi tidak ada gunanya menggunakan atau mengajar mereka juga).$()
- shift + 4,9, shift + 0 - 5 penekanan tombol;Jawaban:
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.
sumber
$()
lebih baik tetapi backticks lebih mudah dan lebih banyak KISS; bisa menjadi konsekuensi OCDish pavlovia dari pemrograman umum.`
adalah Altrg + è, (canggung untuk jenis), sementara$
,(
,)
tidak perlu pengubah apapun.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? .
sumber
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)
sumber
/bin/sh
harus sesuai. Solaris/bin/sh
memang 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 penyesuaiansh
untuk mencarinya di jalur yang dikembalikan olehgetconf PATH
.