在传递给 grep 的变量名末尾使用 \$

在传递给 grep 的变量名末尾使用 \$

我正在查看一个 shell 脚本并发现一行:

ls $dir | grep -c "$NAME.${var}\$"

我知道这$会扩展变量NAMEvar,但是是否需要放在\$最后?

答案1

grep使用字符串"$NAME.${var}\$"作为正则表达式。据推测,在令人烦恼的代码行之前,shell 变量namevar已分配值,以便 shell 解释脚本值$NAME${var}。由于正则表达式的最后一个“$”是用反斜杠转义的,解释脚本的 shell 不会尝试插入 shell 变量的值。 “$”grep作为正则表达式的一部分传递。事实上,“$”grep在正则表达式的上下文中具有特殊含义。 “$”的意思是“行尾” grep。除了你所要求的语义之外什么都不grep需要最后的“$”。

答案2

因此,结果如下:假设我在目录中创建文件,名为:john、alex_john、alex_john1 和 john1,然后执行以下操作:

[root@localhost ~]# ls | grep "john"
john
alex_john
alex_john1
john1
[root@localhost ~]# ls | grep "john\$"   <==here it would insert end of line
john
alex_john
[root@localhost ~]#  

因此,对于第二个 grep,仅打印以 john 结​​尾的文件。

相关内容