Ich möchte für die Zeichenkette ack: „$$
“ in einer Codebasis, aber das Dollarzeichen wie diese Flucht:Wie kann ich mit ack nach einem Dollarzeichen suchen (escape)?
ack \$\$
funktioniert nicht.
Ich möchte für die Zeichenkette ack: „$$
“ in einer Codebasis, aber das Dollarzeichen wie diese Flucht:Wie kann ich mit ack nach einem Dollarzeichen suchen (escape)?
ack \$\$
funktioniert nicht.
Sie erhalten verwirrt durch Shell-Zitat. Wenn Sie Folgendes eingeben:
ack "\\\$\\\$\("
die Schale der doppelten Anführungszeichen interpoliert, so dass \\
zu \
übersetzt wird, wird \$
zu $
übersetzt und \(
wird übersetzt \(
und ack wird die Zeichenfolge \$\$\(
als Argument. Es ist viel einfacher, die Shell-Interpolation zu vermeiden durch einfache Anführungszeichen verwenden, und rufen:
ack '\$\$\('
ersetzen ack
mit echo
zu erkunden, wie die Shell die Saiten erweitert. Beachten Sie, dass
ack "\\$\\$\("
auch funktioniert, aber aus etwas anderen Gründen. Hier werden die ersten zwei \
behandelt als eine einzige (maskiert) \
, dann wird die $
als $
übersetzt, weil es von einem Zeichen folgt, das kein gültiges Zeichen in einem Variablennamen ist. \(
wird zu \(
erweitert anstatt einfach (
, da (
nicht interpoliert wird und daher nicht maskiert werden muss. Beachten Sie jedoch, dass außerhalb von Anführungszeichen \(
in (
konvertiert wird.
Shell-Anführungsregeln werden manchmal verwirrend!
yeah ich werde durch Shell-Zitat Regeln leicht verwirrt - der Echo-Trick ist ein gute Idee, aber danke für den Austausch –
Sie können die Dollarzeichen mit drei Schrägstriche entkommen, wie folgt aus:
ack "\\\$\\\$"
oder einfache Anführungszeichen verwenden, wo man es nur einmal entkommen müssen:
ack '\$\$'
Es ist viel einfacher, einfache Anführungszeichen zu verwenden: 'ack '\ $ \ $ \ ('' sollte gut funktionieren. –
Yup, das ist viel besser - danke! –
Sie können printf
verwenden, um sich um das Angebot für Sie zu kümmern, indem Sie den Formatbezeichner %q
verwenden.
$ printf %q '$$('
\$\$\(
help print
hat folgendes zu sagen (ich gehe davon bash hier) `
%q quote the argument in a way that can be reused as shell input
'Ack '[$] [$]' '. Zeichenklasse Reiniger als N entkommt. –