Ich benötige einen Bash-Befehl, der eine Zeichenfolge in etwas konvertiert, das maskiert ist. Hier ist ein Beispiel:
echo "hello\world" | escape | someprog
Wo der Escape - Befehl macht "hello\world"
in "hello\\\world"
. Dann kann someprog "hello\\world"
wie erwartet verwenden. Dies ist natürlich ein vereinfachtes Beispiel dafür, was ich wirklich tun werde.
Antworten:
In Bash:
beispielsweise:
Dies könnte auch durch Variablen verwendet werden:
quelle
%q
war mehr als ein Jahrzehnt lang bis etwa 2012 kaputt. Es hatte Probleme mit~
. Es gibt auch tragbare sed Einzeiler stackoverflow.com/a/20053121/1073695a='abc$def":'; printf '%q\n' "$a"
führt zuabc\$def\":
(das Dollarzeichen wird maskiert ). Dies ist Bash 4.3 (ich habe das gleiche Ergebnis in Bash 3.2 erhalten). Welche Version verwenden Sie?printf "%q" 'he$l&lo\world'
printf '%q\n' text
zitiert den Text imbash
Format (und für das aktuelle Gebietsschema), sodass dies im Fall des OP nur funktionieren würde, wennsomeprog
genau dieselbe Anführungszeichen-Syntax verwendet würde,bash
die höchst unwahrscheinlich ist.Pure Bash, verwenden Sie die Parametersubstitution:
quelle
Sie können Perl verwenden, um verschiedene Zeichen zu ersetzen, zum Beispiel:
Abhängig von der Art Ihrer Flucht können Sie mehrere Anrufe verketten, um den richtigen Zeichen zu entkommen.
quelle