Shell

如何在shell的參數中轉義<或>?

  • July 26, 2011

我想使用grep包含該&lt;字元的 PCRE 表達式。Bash 認為我想重定向,但我不想。我怎麼能逃脫&lt;

我可以用反斜杠來做到這一點:

25 % grep \&lt; xmospos.c
#include        &lt;stdio.h&gt;
#include        &lt;stdlib.h&gt;
#include        &lt;getopt.h&gt;
#include        &lt;X11/Xlib.h&gt;

引用的小於和引用的反斜杠小於兩者都給出了愚蠢的答案。

兩個簡單的規則:

  • 反斜杠\C轉義下一個字元,不管它是什麼,除了換行符。
  • 單引號'text'轉義它們之間的任何字元,包括反斜杠,但不包括單引號(因為它標記了引用文本的結尾)。

因此:

grep -P '&lt;html&gt;' myfile
grep -P \&lt;html\&gt; myfile
grep -P '(?&lt;!&lt;)html' myfile
grep -P \(\?\&lt;\!\&lt;\) myfile

如果您需要傳遞包含單引號的參數,您可以使用'\''在單引號內“轉義”單引號。從技術上講,它的作用是結束第一個文字文本,然後在同一個單詞中放入一個文字,然後'在同一個單詞中添加更多文字。

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

其餘的引用規則(總結):

  • 您至少需要在某些時候引用以下字元:空格和!"#$&'()*;&lt;&gt;?[\]^{|}~(換句話說,以下字元是安全的:字母、數字%+,-./:=@_`和非 ASCII 字元)。
  • 在雙引號之間,所有字元都按字面意思使用,除了"$\``and (在啟用了歷史記錄的 shell 中)!`。雙引號之間的反斜杠將出現在字元串中,除非它位於非文字字元之一之前。

這些規則適用於 bash 和其他 Bourne 樣式的 shell(例如 ash 和 ksh)。它們也適用於 zsh(除了=空格之後可能需要引用)。csh/tcsh 和 Fish 中的規則不同。

引用自:https://unix.stackexchange.com/questions/17398