Nu wil ik weten of er regels zijn met het ‘\’-teken. Ik heb grep "\\" XXFile
geprobeerd, maar het geeft “Trailing Backslash” aan. Maar toen ik grep '\\' XXFile
probeerde, 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 echo
gebruiken om precies te zien wat de shell doet. echo
voert 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.