我惊讶地发现单引号版本与正则表达式完全相同。我现在看到的唯一真正的区别是双引号扩展了regex模式中的变量。我还遗漏了什么吗?
单引号和双引号之间的区别是shell问题,而不是 grep
问题。在将参数传递给grep
之前,是shell决定是否进行变量展开。因为shell处理参数的最后一步是删除引号,所以grep
甚至看不到引号。
变量展开并不是单引号和双引号的唯一区别。shell还在双引号内执行命令替换和算术展开。例如:
$ echo "$(date) and 2+2=$((2+2))"
Tue Aug 5 18:52:39 PDT 2014 and 2+2=4
$ echo '$(date) and 2+2=$((2+2))'
$(date) and 2+2=$((2+2))