Shell
如何在shell的參數中轉義<或>?
我想使用
grep
包含該<
字元的 PCRE 表達式。Bash 認為我想重定向,但我不想。我怎麼能逃脫<
?
我可以用反斜杠來做到這一點:
25 % grep \< xmospos.c #include <stdio.h> #include <stdlib.h> #include <getopt.h> #include <X11/Xlib.h>
引用的小於和引用的反斜杠小於兩者都給出了愚蠢的答案。
兩個簡單的規則:
- 反斜杠
\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 中的規則不同。