Pertanyaan ini bukan tentang bagaimana menulis string literal yang benar. Saya tidak dapat menemukan pertanyaan terkait yang bukan tentang cara keluar dari variabel untuk konsumsi langsung dalam skrip atau oleh program lain.
Tujuan saya adalah mengaktifkan skrip untuk menghasilkan skrip lain. Ini karena tugas dalam skrip yang dihasilkan akan berjalan di mana saja dari 0 hingga n kali di komputer lain, dan data yang darinya dihasilkan dapat berubah sebelum dijalankan (lagi), jadi melakukan operasi secara langsung, melalui jaringan akan tidak bekerja.
Diberikan variabel yang diketahui yang mungkin berisi karakter khusus seperti tanda kutip tunggal, saya perlu menuliskannya sebagai string literal yang sepenuhnya diloloskan, misalnya variabel yang foo
mengandung bar'baz
harus muncul dalam skrip yang dihasilkan sebagai:
qux='bar'\''baz'
yang akan ditulis dengan menambahkan "qux=$foo_esc"
ke baris script lainnya. Saya melakukannya menggunakan Perl seperti ini:
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
tapi ini sepertinya berlebihan.
Saya tidak berhasil melakukannya dengan bash sendirian. Saya telah mencoba banyak variasi:
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
tetapi salah satu garis miring muncul di output (ketika saya lakukan echo "$foo"
), atau mereka menyebabkan kesalahan sintaks (mengharapkan input lebih lanjut jika dilakukan dari shell).
alias "varname=$varname" varname
atauvar=value set
alias
dan / atauset
secara universal