执行bash脚本和命令grep会以不同的方式处理单引号

时间:2016-08-23 02:58:03

标签: linux bash

在Advanced Bash-Scripting Guide中,我找到了

  

在单引号内,除了'之外的每个特殊字符。得到   字面解释。

所以我认为grep '\<the\>' file.txt会搜索\<the\>,而不是the。但它确实搜索了the

#!/bin/bash

grep '\<the\>' file.txt


也许我没有清楚地描述我的问题。在手册页中,

  

用单引号括起字符可保留引号中每个字符的字面值。

所以我的问题是:现在bash会将单引号中的封闭字符视为字面值,为什么'\<the\>'在grep中被视为the?它是grep自己的特征,与bash不同吗?

2 个答案:

答案 0 :(得分:3)

确实, bash 会逐字传递你的字符串。

grep 解释字符串(作为正则表达式)。如果您想避免这种情况,请使用grep -F 。使用该选项,grep将按字面搜索给定字符串。

答案 1 :(得分:2)

您需要添加另一个反斜杠\以匹配整个模式,因为符号\<\>grep来说是特殊的。引用联机帮助页:man grep

  

反斜杠字符和特殊表达

  The symbols \< and \> respectively match the empty string at the beginning and end
  of  a  word. 

enter image description here