2013-02-21 15 views

Antwort

15

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!

+1

yeah ich werde durch Shell-Zitat Regeln leicht verwirrt - der Echo-Trick ist ein gute Idee, aber danke für den Austausch –

0

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 '\$\$' 
+3

Es ist viel einfacher, einfache Anführungszeichen zu verwenden: 'ack '\ $ \ $ \ ('' sollte gut funktionieren. –

+0

Yup, das ist viel besser - danke! –

0

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 
15

Verwenden ack der -Q Ihr Entkommen zu tun.

ack -Q '$$' 
+0

Awesome, danke! – blushrt

Verwandte Themen