Rekomendasi modern adalah untuk menggunakan:
$(...)
bukannya yang lebih lama:
`...`
terutama untuk keterbacaan dan untuk menghindari perlunya melarikan diri saat bersarang.
Kerang mana yang tidak mendukung $(...)
formulir, dan adakah di antara mereka yang masih digunakan saat ini?
shell
command-substitution
portability
joeytwiddle
sumber
sumber
cmd
) di shell * sh telah ditinggalkan? dan Anda akan menemukan jawabannya.sh
yang akan didukung oleh lingkungan yang tepat$(...)
.Jawaban:
Shell Bourne asli, csh atau tcsh semua tidak mendukung
$()
dan mengharuskan``
substitusi perintah.Shell Bourne tidak lagi digunakan sebagai shell default (/ bin / sh) pada banyak sistem operasi berbasis UNIX. Namun, cangkang ini masih dipasok oleh vendor OS karena masih digunakan karena alasan historis.
Baik AIX dan HP-UX memiliki / bin / sh sebagai shell yang sesuai dengan POSIX. Bourne shell masih tersedia pada AIX sebagai 'bsh' (tetapi dihentikan pada tahun 1995 dengan AIX 4.1) dan HP-UX 11.11 '/ usr / old / bin / sh' (Bourne dihapus dari 11.23). Saya tidak yakin kapan saklar dibuat, tetapi itu bertahun-tahun yang lalu.
sumber
Solaris 10 dan yang lebih lama
/bin/sh
tidak mendukung$()
.Ini masih digunakan sampai sekarang karena Solaris 10 masih digunakan, Sun tidak ingin menggantinya dengan versi yang sesuai standar (hingga dan termasuk Solaris 10) - dan karena kebanyakan orang menganggap
/bin/sh
sebagai shell default dan tidak tahu bagaimana untuk mengeksekusi skrip dengan POSIX shell yang sesuai .Motivasi Sun untuk tidak berubah
/bin/sh
adalah untuk menghindari melanggar skrip shell yang ada yang mengandalkan perilaku tidak sesuai.sumber
/bin/sh
...