Answers:
反斜杠是许多应用程序的特殊字符:
包括外壳:您需要使用另一个反斜杠或更优雅地对其进行转义,并尽可能使用单引号:
$ printf '%s\n' foo\\bar 'foo\bar'
foo\bar
foo\bar
在此命令接收到两个带有value的参数foo\bar,它们在终端上按原样回显。
(上面,我使用printf了echo许多echo实现而不是自己对反斜杠进行解释(这里将扩展\b为退格字符))。
但是反斜杠也是。的特殊字符grep。该命令可以识别像许多特殊序列\(,\|,\.,等等。因此,类似地,您需要给grep加上一个双\\精度的实际反斜杠字符。这意味着使用外壳程序需要输入:
grep 'foo\\bar'
或等效地:
grep foo\\\\bar
(这两行代码都告诉shell将传递foo\\bar为的参数grep)。
许多其他命令在其某些参数中解释反斜杠……,并且需要两个转义级别(一个转义外壳解释,一个转义命令解释)。
顺便说一句,对于shell,单引号'…'阻止任何形式的字符解释,而双引号仅阻止其中的某些字符:特别是$,`并\保持其中的活动字符"…"。
您也可以使用fgrep(仅grep与-F标志一起使用)。这迫使grep将模式解释为固定字符串(即,将a \视为文字\)。您仍然需要保护反斜杠不被外壳扩展。
grep -F '\resources\'
..\,即使'..\\'没有得到我想要的结果。grep -F '..\'得到了我想要的东西!谢谢
grep '\\resources\\'