Saya membutuhkan perintah bash yang akan mengubah string menjadi sesuatu yang lolos. Berikut contohnya:
echo "hello\world" | escape | someprog
Mana perintah melarikan diri membuat "hello\world"
menjadi "hello\\\world"
. Kemudian, beberapa katak dapat digunakan "hello\\world"
seperti yang diharapkan. Tentu saja, ini adalah contoh sederhana dari apa yang sebenarnya akan saya lakukan.
Jawaban:
Di Bash:
sebagai contoh:
Ini juga dapat digunakan melalui variabel:
sumber
%q
telah rusak selama lebih dari satu dekade sampai sekitar tahun 2012. Itu bermasalah~
. Ada juga portabel sed one-liners stackoverflow.com/a/20053121/1073695a='abc$def":'; printf '%q\n' "$a"
menghasilkanabc\$def\":
(tanda dolar di-escape). Ini Bash 4.3 (Saya mendapat hasil yang sama di Bash 3.2). Versi apa yang Anda gunakan?printf "%q" 'he$l&lo\world'
printf '%q\n' text
mengutip teks dalambash
format (dan untuk lokal saat ini), jadi itu hanya akan bekerja dalam kasus OP jika merekasomeprog
memiliki sintaks kutipan yang sama persis sepertibash
yang sangat tidak mungkin.Pure Bash, gunakan substitusi parameter:
sumber
Anda dapat menggunakan perl untuk mengganti berbagai karakter, misalnya:
Bergantung pada sifat pelarian Anda, Anda dapat menghubungkan beberapa panggilan untuk keluar dari karakter yang tepat.
sumber