man bash
memberikan ini tentang kutipan tunggal
Menutup karakter dalam tanda kutip tunggal mempertahankan nilai literal setiap karakter dalam tanda kutip. Kutipan tunggal mungkin tidak terjadi di antara tanda kutip tunggal, bahkan ketika didahului oleh garis miring terbalik.
Apa pun yang Anda ketikkan pada baris perintah, bash menafsirkannya dan kemudian mengirimkan hasilnya ke program yang seharusnya dikirim. Dalam kasus ini, jika Anda menggunakan sed 's/$old_run/$new_run/'
, bash pertama kali melihat, bash sed
mengenalinya sebagai hadiah yang dapat dieksekusi dalam $PATH
variabel . The sed
executable membutuhkan masukan. Bash mencari input dan menemukan 's/$old_run/$new_run/'
. Kutipan tunggal mengatakan bash untuk tidak menafsirkan konten di dalamnya dan meneruskannya apa adanya. Jadi, bash lalu berikan mereka sed. Sed memberikan kesalahan karena $
dapat terjadi hanya pada akhir baris.
Alih-alih jika kita menggunakan tanda kutip ganda, yaitu, "s/$old_run/$new_run/"
maka bash melihat ini dan menafsirkannya $old_run
sebagai nama variabel dan membuat substitusi (fase ini disebut ekspansi variabel). Ini memang yang kami butuhkan.
Tapi, Anda harus berhati-hati menggunakan tanda kutip ganda karena, mereka ditafsirkan pertama kali oleh bash dan kemudian diberikan kepada sed. Jadi, beberapa simbol seperti `harus diloloskan sebelum menggunakannya.