Ich hatte das Gefühl, dass ich folgendes herausgefunden habe: "Ein Dollarzeichen vor "single Quotes" verwandelt die Backslashs wieder in Sonderzeichen zurück, so dass sie als solche interpretiert werden können. Das ist die einzige Funktion von Dollarzeichen vor "single Quotes"."
Also habe ich angefangen, diese "Behauptung" zu überprüfen. (Es geht mir nur darum, zu wissen, ob diese Behauptung stimmt oder nicht.)
Bei diesen Beispielen verwandelt wie erwartet "$" vor den single Quotes die Strings "\" in Sonderzeichen zurück und interpretiert sie:
1 2 3 | echo 'This is a simple string.' echo $'This is a string with a\nnewline.' echo $'This is a string with a\ttab.' |
Der folgende Befehl scheint meine Erwartung auch zu bestätigen:
1 2 3 | $ echo $'2g.h"f*$g"fdd/f#@%q\n&=f\g\\//==?+[]{|()^`n`r`a\d,\s\w\t\r' 2g.h"f*$g"fdd/f#@%q &=f\g\//==?+[]{|()^`n`r`a\d,\s\w |
\n wird als Zeilenumbruch interpretiert und \t und \r werden wohl auch irgendwie interpretiert. \g, \d, \s, \w bedeutet wohl nichts.
Soweit alles wie erwartet.
Nun nehme ich den gleichen Befehl noch einmal, aber verlängere die Zeichenkette um \p:
1 2 3 | $ echo $'2g.h"f*$g"fdd/f#@%q\n&=f\g\\//==?+[]{|()^`n`r`a\d,\s\w\t\r\p' 2g.h"f*$g"fdd/f#@%q \pf\g\//==?+[]{|()^`n`r`a\d,\s\w |
Weshalb ist jetzt nach dem Zeilenumbruch plötzlich "=&" verschwunden und durch "\p" ersetzt worden?
Ich hätte eigentlich folgenden Output erwartet:
1 2 | 2g.h"f*$g"fdd/f#@%q &=f\g\//==?+[]{|()^`n`r`a\d,\s\w \p |