The repo
perintah tidak bisa peduli apa jenis kutipan mendapat. Jika Anda membutuhkan ekspansi parameter, gunakan tanda kutip ganda. Jika itu berarti Anda akhirnya harus melakukan backslash banyak hal, gunakan tanda kutip tunggal untuk sebagian besar, dan kemudian keluar dari mereka dan pergi ke ganda untuk bagian di mana Anda perlu ekspansi terjadi.
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
Penjelasan berikut, jika Anda tertarik.
Saat Anda menjalankan perintah dari shell, perintah yang diterima sebagai argumen adalah array dari string yang diakhiri dengan null. String-string itu mungkin benar - benar mengandung karakter bukan nol.
Tetapi ketika shell sedang membangun array string dari baris perintah, itu menafsirkan beberapa karakter khusus; ini dirancang untuk membuat perintah lebih mudah (memang, mungkin) untuk diketik. Misalnya, spasi biasanya menunjukkan batas antara string dalam array; untuk alasan itu, argumen individu kadang-kadang disebut "kata-kata". Namun suatu argumen mungkin memiliki ruang di dalamnya; Anda hanya perlu beberapa cara untuk memberi tahu shell itu yang Anda inginkan.
Anda dapat menggunakan garis miring terbalik di depan karakter apa pun (termasuk spasi, atau garis miring terbalik lainnya) untuk memberi tahu shell untuk memperlakukan karakter tersebut secara harfiah. Tetapi sementara Anda dapat melakukan sesuatu seperti ini:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... itu bisa melelahkan. Jadi cangkang menawarkan alternatif: tanda kutip. Ini datang dalam dua varietas utama.
Tanda kutip ganda disebut "kutipan pengelompokan". Mereka mencegah wildcard dan alias diperluas, tetapi sebagian besar mereka untuk memasukkan spasi dalam kata. Hal-hal lain seperti perluasan parameter dan perintah (hal-hal yang ditandai oleh a $
) masih terjadi. Dan tentu saja jika Anda ingin tanda kutip ganda di dalam tanda kutip ganda, Anda harus melakukan backslash:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
Tanda kutip tunggal lebih kejam. Segala sesuatu di antara mereka diambil sepenuhnya secara harfiah, termasuk garis miring terbalik. Sama sekali tidak ada cara untuk mendapatkan kutipan tunggal literal di dalam kutipan tunggal.
Untungnya, tanda kutip di shell bukan pembatas kata ; sendiri, mereka tidak mengakhiri sepatah kata pun. Anda bisa masuk dan keluar dari kutipan, termasuk antara berbagai jenis kutipan, dalam kata yang sama untuk mendapatkan hasil yang diinginkan:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
Jadi itu lebih mudah - backslash jauh lebih sedikit, meskipun urutan kutipan-tertutup, backslashed-literal-kutipan-tunggal, buka-kutipan-tunggal memerlukan waktu untuk membiasakan diri.
Kerang modern telah menambahkan gaya kutipan lain yang tidak ditentukan oleh standar POSIX, di mana tanda kutip tunggal yang diawali diawali dengan tanda dolar. String yang dikutip mengikuti konvensi serupa ke string literal dalam bahasa pemrograman ANSI C, dan karena itu kadang-kadang disebut "string ANSI" dan $'
... '
pasangan "kutipan ANSI". Dalam string seperti itu, saran di atas tentang backslash yang diambil secara harfiah tidak lagi berlaku. Sebaliknya, mereka menjadi istimewa lagi - Anda tidak hanya dapat menyertakan tanda kutip tunggal literal atau garis miring terbalik dengan menambahkan garis miring terbalik padanya, tetapi shell juga memperluas karakter ANSI C yang lolos (seperti \n
untuk baris baru,\t
untuk tab, dan \xHH
untuk karakter dengan kode heksadesimalHH
). Namun, jika tidak, mereka berperilaku sebagai string yang dikutip tunggal: tidak ada parameter atau substitusi perintah yang terjadi:
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
Yang penting untuk dicatat adalah bahwa string tunggal yang diterima sebagai argumen ke echo
perintah persis sama dalam semua contoh ini. Setelah shell selesai mengurai baris perintah, tidak ada cara untuk menjalankan perintah untuk mengetahui apa yang dikutip bagaimana. Bahkan jika itu mau.
repo forall -c ' ...before... '"$variable"' ...after...'