我正在查看一个 shell 脚本并发现一行:
ls $dir | grep -c "$NAME.${var}\$"
我知道这$
会扩展变量NAME
和var
,但是是否需要放在\$
最后?
答案1
grep
使用字符串"$NAME.${var}\$"
作为正则表达式。据推测,在令人烦恼的代码行之前,shell 变量name
和var
已分配值,以便 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 结尾的文件。