$ echo $(date)
Thu Jul 2 16:33:11 SGT 2015
$ echo ${date}
$ name=foo
$ echo $(name)
ksh: name: not found
$ echo ${name}
foo
Sepertinya $ {variabel} sama dengan $ variabel. sementara $ () adalah untuk mengeksekusi perintah. Mengapa menggunakan $ {} saat itu?
${
variable_name
}
Jawaban:
$(command)
adalah "substitusi perintah". Seperti yang Anda pahami, ia menjalankancommand
, menangkap outputnya, dan memasukkannya ke dalam baris perintah yang berisi$(…)
; misalnya,${parameter}
adalah "substitusi parameter". Banyak informasi dapat ditemukan di halaman manual shell, bash (1) , di bawah tajuk " Parameter Expansion ":Untuk parameter posisi, lihat “ Parameter Posisi ”, di bawah. Dalam penggunaannya yang paling umum, seperti yang ditunjukkan dalam jawaban lain,
parameter
adalah nama variabel. The${…}
bentuk, seperti yang dinyatakan pada akhir ayat di atas, memungkinkan Anda mendapatkan nilai variabel (yaitu, ) dan mengikutinya segera dengan surat, digit, atau garis bawah:$variable_name
Anda juga dapat melakukan ini dengan kutipan:
Atau, sebagai latihan dalam opsi, Anda bisa menggunakan variabel kedua:
Tapi ini hanya langkah 1. Paragraf berikutnya di halaman manual menarik, meskipun sedikit samar:
Saya tidak yakin bagaimana saya bisa membuat ini lebih jelas kecuali dengan contoh:
Jadi mari kita sebut langkah 1½ itu. Ada banyak hal menarik yang dapat Anda lakukan sebagai langkah 2:
Anda tidak dapat melakukan hal-hal itu tanpa
{
...}
kawat gigi.Parameter Posisi
Pertimbangkan contoh buatan ini :
karena shell tidak mengerti
$10
,$11
, dll memperlakukan$10
seolah-olah itu${1}0
. Tetapi ia mengerti${10}
,${11}
dll., Sebagaimana disebutkan dalam halaman manual (“parameter posisi dengan lebih dari satu digit”).Di atas (bersama dengan lebih banyak bentuk konstruksi) dibahas secara lebih panjang di halaman manual shell, bash (1) .
${parameter…something_else}
Catatan tentang Harga
Perhatikan bahwa Anda harus selalu mengutip variabel shell kecuali Anda memiliki alasan yang kuat untuk tidak melakukannya, dan Anda yakin tahu apa yang Anda lakukan. Sebaliknya, meskipun kawat gigi bisa penting, mereka tidak sepenting kutipan.
Itu juga berlaku untuk parameter posisi (yaitu, argumen baris perintah; misalnya,
"$1"
) dan juga substitusi perintah:Lihat kutipan Bash yang tidak terhapus pada substitusi perintah untuk risalah singkat tentang interaksi antara kutipan dan
$(
…)
.sumber
!
.${!animal}
sebenarnya merujuk ke variabel$cat
bukan nilai kucing." Ya, itulah intinya. "Bagaimana / at menjadi" c "dalam echo $ {animal / at / ow}?" Hah? / at tidak menjadi "c"; "Kucing" menjadi "sapi" ketika "at" diganti dengan "ow".Dalam contoh Anda, $ var dan $ {var} identik. Namun, kurung kurawal berguna saat Anda ingin memperluas variabel dalam string:
Dengan demikian kurung kurawal menyediakan sarana untuk mengganti variabel untuk mendapatkan nama variabel baru, itu sendiri untuk diganti.
sumber
Saya biasanya melihatnya lebih umum di string. Sesuatu seperti ini tidak akan berfungsi:
Tapi ini akan:
Seperti yang Anda katakan dengan benar,
$()
digunakan untuk menjalankan perintah:Anda juga dapat menggunakan backticks, tetapi saya merasa
$()
lebih fleksibel. Untuk satu hal, backticks tidak dapat (mudah) disarangkan.sumber
date_directory=`ls \`date '+%Y-%m-%d'\``
. Tapi itu sangat jelek;$(…)
jauh lebih jelas dan lebih mudah digunakan.`…`
itu yang (hanya) sintaks untuk substitusi perintah selama bertahun-tahun sebelum$(…)
ditemukan, sehingga Anda tidak perlu membayangkan apa pun - orang melakukannya.