Kasus pertama:
echo $'$foo'
Yang gema $foo
(artinya yang pertama $
dalam perintah gema saya dijatuhkan)
Yang pertama $
dijalankan sebagai perintah. Echo tidak membutuhkan spasi di antara argumen, hanya membutuhkannya.
Jadi gema $'$foo'
mengembang untuk menjalankan perintah $
(yang bukan perintah sehingga mengabaikannya) lalu gema '$foo'
. Apa pun yang ''
ada diambil pada nilai nominal - tidak memperluas atau apa pun. Anda dapat memasukkan apa yang Anda inginkan '' dan tidak ada yang terjadi.
Jika Anda mengganti $
dengan $$
itu menggemakan ID proses.
Kedua:
echo $"$foo"
Gema ini pwd
(yang berarti bash mengembang $foo
, variabel saya, hingga nilainya)
Itu karena ""
tidak mencegahnya berkembang. ""
biasanya digunakan untuk memastikan ada nilai untuk dibandingkan.
Jika Anda memiliki variabel yang bisa kosong (misalnya dari grep
hasil) maka Anda ingin membandingkan dengan nilai / variabel lain, Anda harus memasukkan variabel pertama ""
. Ini memastikan bahwa selalu ada perbandingan untuk diperiksa, bukan hanya bagian kode yang kosong (seperti yang dilihat bash) yang memberikan kesalahan.
Akhirnya, nomor 3. Ini menarik.
echo $`$foo`
Gema ini $~/scripts
(saya berharap untuk mencetak ~/scripts
dan tidak $~/scripts
)
Itu karena (dalam hal ini) gema mencetak $
karakter terlebih dahulu. Menempatkan sesuatu di backticks menyebabkan nilai variabel dijalankan sebagai perintah (cara yang lebih baik untuk melakukannya di versi bash yang lebih baru adalah $(command)
)
Jadi pertama-tama gema $
kemudian diperluas `$foo`
ke `pwd`
mana dijalankan dan kembali ~/Scripts
. Tapi kami sudah $
mencetak sebelumnya - jadi seluruh hasilnya $~/Scripts
.