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\\'