如何在 shell 中的参数中转义 < 或 > ?

如何在 shell 中的参数中转义 < 或 > ?

我想grep与包含该字符的 PCRE 表达式一起使用<。 Bash 认为我想要重定向,但我不想。我该如何逃脱<

答案1

我可以用反斜杠来做到这一点:

25 % grep \< xmospos.c
#include        <stdio.h>
#include        <stdlib.h>
#include        <getopt.h>
#include        <X11/Xlib.h>

引用的小于号和引用的反斜杠小于号都给出了愚蠢的答案。

答案2

两个简单的规则:

  • 反斜杠\C转义下一个字符,无论它是什么,除了换行符。
  • 单引号'text'转义它们之间的任何字符,包括反斜杠,但不包括单引号(因为它标记引用文本的结尾)。

因此:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

如果需要传递包含单引号的参数,可以使用'\''“转义”单引号内的单引号。从技术上讲,它的作用是结束第一个文字文本,然后将文字放入'同一个单词中,然后将更多文字文本放在同一个单词中。

grep '^D'\''oh!' myfile

其余引用规则(总结):

  • 您至少需要在某些时候引用以下字符:空格和!"#$&'()*;<>?[\]^`{|}~(换句话说,以下字符是安全的:字母、数字%+,-./:=@_和非 ASCII 字符)。
  • 在双引号之间,除 and 之外的所有字符均按字面意思使用"$\`(在启用历史记录的 shell 中)!。双引号之间的反斜杠将出现在字符串中,除非它位于非文字字符之一之前。

这些规则适用于 bash 和其他 Bourne 风格的 shell(例如 ash 和 ksh)。它们也适用于 zsh(除了=空格后面可能需要引用)。 csh/tcsh 和 Fish 中的规则不同。

相关内容