Questa domanda non riguarda come scrivere letteralmente una stringa con escape. Non sono riuscito a trovare alcuna domanda correlata che non riguardi come sfuggire alle variabili per il consumo diretto all'interno di uno script o di altri programmi.
Il mio obiettivo è abilitare uno script per generare altri script. Questo perché le attività negli script generati verranno eseguite ovunque da 0 a n volte su un altro computer e i dati da cui vengono generati potrebbero cambiare prima di essere eseguiti (di nuovo), quindi eseguendo le operazioni direttamente, su una rete non funziona.
Data una variabile nota che può contenere caratteri speciali come virgolette singole, devo scriverla come una stringa letteralmente completamente sfuggita, ad esempio una variabile foo
contenente bar'baz
dovrebbe apparire nello script generato come:
qux='bar'\''baz'
che verrebbe scritto aggiungendo "qux=$foo_esc"
alle altre righe della sceneggiatura. L'ho fatto usando Perl in questo modo:
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
ma questo sembra eccessivo.
Non ho avuto successo nel farlo con bash da solo. Ho provato molte varianti di questi:
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
ma nell'output compaiono delle barre extra (quando lo faccio echo "$foo"
) o causano un errore di sintassi (aspettandosi ulteriori input se fatto dalla shell).
alias "varname=$varname" varname
oppurevar=value set
alias
e / oset
abbastanza universalmente