Apakah ada perbedaan dalam memanggil variabel dengan sintaks ${var}
dan $(var)
? Misalnya, bagaimana variabel akan diperluas atau apa?
111
Tidak ada perbedaan - artinya sama persis (di GNU Make dan di POSIX make).
Saya pikir itu $(round brackets)
terlihat lebih rapi, tapi itu hanya preferensi pribadi.
(Jawaban lain menunjuk ke bagian yang relevan dari dokumentasi GNU Make, dan perhatikan bahwa Anda tidak boleh mencampur sintaks dalam satu ekspresi)
$()
in make untuk menghindari kebingungan (lebih dari yang sudah ada) antara variabel make dan shell. GNU Membuat dokumentasi tentang referensi variabel .deploy: ${DEPS}
sebagai kesalahan sintaks untuk saya, tetapi ditampilkandeploy: $(DEPS)
sebagai benar, meskipun kedua ejaan memiliki efek yang sama saat dipanggilmake
.The Dasar-dasar dari Variabel Referensi bagian dari
GNU make
negara dokumentasi tidak ada perbedaan :sumber
Seperti yang telah ditunjukkan dengan benar, tidak ada perbedaan tetapi berhati-hatilah untuk tidak mencampur dua jenis pembatas karena dapat menyebabkan kesalahan samar seperti contoh GNU unomadh .
Dari GNU buat manual tentang Fungsi Panggilan Sintaks (penekanan milik saya):
sumber
Sebenarnya, ini terlihat cukup berbeda:
keluaran
Tapi sejauh ini saya hanya menemukan perbedaan ini ketika nama variabel menjadi $ {...} mengandung koma sendiri. Saya pertama kali mengira $ {...} memperluas koma bukan sebagai bagian dari nilainya, tetapi ternyata saya tidak dapat meretasnya dengan cara ini. Saya masih tidak mengerti ini ... Jika ada yang punya penjelasan, saya akan senang mengetahuinya!
sumber
Gaya $ {} memungkinkan Anda menguji aturan make di shell, jika Anda memiliki variabel lingkungan yang sesuai yang disetel, karena itu kompatibel dengan bash.
sumber
Ini membuat perbedaan jika ekspresi mengandung tanda kurung yang tidak seimbang:
->
Untuk referensi variabel, ini membuat perbedaan untuk fungsi, atau untuk nama variabel yang mengandung tanda kurung (ide buruk)
sumber