Saya mengalami masalah dengan melarikan diri karakter dalam bash. Saya ingin menghindari tanda kutip tunggal dan ganda saat menjalankan perintah di bawah pengguna yang berbeda. Untuk keperluan pertanyaan ini, katakanlah saya ingin mengulangi yang berikut di layar:
'single quote phrase' "double quote phrase"
Bagaimana saya bisa lolos dari semua karakter khusus, jika saya juga perlu beralih ke pengguna lain:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Tentu saja, ini tidak membuahkan hasil yang benar.
shell
quoting
escape-characters
m33lky
sumber
sumber
bash
baik dalam perjalanan untuk membuat saya marah.Jawaban:
Anda dapat menggunakan sintaks literal string berikut:
Dari
man bash
sumber
Dalam shell POSIX, dengan asumsi dalam string Anda tidak ada variabel, perintah atau ekspansi sejarah, dan tidak ada baris baru, ikuti resep dasar ini:
Untuk mengutip string umum dengan kutipan tunggal, lakukan tindakan berikut:
Ganti setiap urutan karakter non-kutipan tunggal dengan urutan yang sama dengan tanda kutip tunggal terkemuka dan tambahan:
'aaa' ==> ''aaa''
Melarikan diri dengan garis miring terbalik setiap karakter kutipan tunggal yang sudah ada :
' ==> \'
Khususnya,
''aaa'' ==> \''aaa'\'
Untuk mengutip string umum dengan tanda kutip ganda, lakukan tindakan berikut:
Tambahkan tanda kutip ganda terkemuka dan akhir:
aaa ==> "aaa"
Melarikan diri dengan backslash setiap karakter kutipan ganda dan setiap karakter backslash:
" ==> \", \ ==> \\
Beberapa contoh:
sehingga contoh Anda dapat diperluas dengan yang berikut:
sumber
Contoh sederhana untuk menghindari kutip di shell:
Ini dilakukan dengan menyelesaikan yang sudah dibuka satu (
'
), menempatkan satu lolos (\'
), lalu membuka satu lagi ('
).Kalau tidak:
Ini dilakukan dengan menyelesaikan yang sudah dibuka satu (
'
), menempatkan kutipan di kutipan lain ("'"
), lalu membuka yang lain ('
).Terkait: Bagaimana cara melepaskan tanda kutip tunggal dalam string tanda kutip tunggal? di stackoverflow SE
sumber
Jawaban yang diterima berfungsi untuk kutipan sederhana (satu tingkat):
Untuk mendapatkan perintah yang disajikan untuk bekerja, Anda perlu mengutip dua kali.
Script ini bisa melakukan semua pekerjaan:
Jalankan skrip untuk mendapatkan:
Baris pertama berfungsi untuk gema sederhana:
Baris kedua akan bekerja untuk perintah yang dikutip ganda:
sumber
gema 'Aku siswa' tidak berfungsi. Tetapi berikut ini berfungsi:
echo $ 'I \' ma student 'Dari halaman manual bash:
Kutipan tunggal mungkin tidak terjadi di antara tanda kutip tunggal, bahkan ketika didahului oleh garis miring terbalik. .... Kata-kata dalam bentuk $ 'string' diperlakukan secara khusus. Kata diperluas ke string, dengan karakter backslash-escaped diganti sebagaimana ditentukan oleh standar ANSI C.
sumber