Toen grep “\\” XXFile kreeg ik “Trailing Backslash”

Nu wil ik weten of er regels zijn met het ‘\’-teken. Ik heb grep "\\" XXFilegeprobeerd, maar het geeft “Trailing Backslash” aan. Maar toen ik grep '\\' XXFileprobeerde, ging het goed. Kan iemand uitleggen waarom de eerste zaak niet kan worden uitgevoerd? Bedankt.


Antwoord 1, autoriteit 100%

Het verschil zit in hoe de shell de backslashes behandelt:

  • Als je "\\"tussen dubbele aanhalingstekens schrijft, interpreteert de shell de backslash-escape en geeft uiteindelijk de string \door aan grep. Grep ziet dan een backslash zonder volgend teken, dus zendt het een “trailing backslash”-waarschuwing uit. Als u dubbele aanhalingstekens wilt gebruiken, moet u twee niveaus van escape toepassen, één voor de shell en één voor grep. Het resultaat: "\\\\".

  • Als je '\\'tussen enkele aanhalingstekens schrijft, doet de shell geenenige interpretatie, wat betekent dat grep de string \\met beide backslashes intact. Grep interpreteert dit als een escaped backslash, dus het zoekt in het bestand naar een letterlijk backslash-teken.

Als dat niet duidelijk is, kunnen we echogebruiken om precies te zien wat de shell doet. echovoert zelf geen backslash-interpretatie uit, dus wat het afdrukt, is wat de shell eraan heeft doorgegeven.

$ echo "\\"
\
$ echo '\\'
\\

Antwoord 2, autoriteit 5%

Je had het commando kunnen schrijven als

grep "\\\\" ...

Dit heeft twee paar backslashes die door bash worden omgezet in twee enkele backslashes. Dit nieuwe paar wordt dan doorgegeven aan grep als een ontsnapte backslash die je geeft wat je wilt.

Other episodes