Saya mengalami kesulitan menemukan beberapa nuansa antara tanda kutip tunggal dan ganda dalam konteks variabel
Saya mendefinisikan:
foo=pwd
kemudian jalankan ini:
echo $'$foo'
Yang gema $foo
(artinya yang pertama $
dalam perintah gema saya dijatuhkan)
echo $"$foo"
Gema ini pwd
(yang berarti bash mengembang $foo
, variabel saya, hingga nilainya)
echo $`$foo`
Akhirnya gema ini $~/scripts
(saya berharap untuk mencetak ~/scripts
dan tidak $~/scripts
)
dapatkah seseorang membantu saya mengetahui perbedaan-perbedaan ini?
command-line
bash
scripts
Ilan
sumber
sumber
Kasus pertama:
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:
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.
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
.sumber