我一直在努力使用这个grep命令:
ls data | grep -E "^[aeiou].*[aeiou]$"
该命令应该查找以小写元音
开头和结尾的所有文件根据我的理解,在使用-E标识符时不需要任何转义字符,因此它不会被解释为锚。我把这个命令列在我的Makefile中的目标下,并且$继续像锚一样工作。
有人知道我在这里错过了什么吗?
当试图使用转义字符运行时,目标将完全忽略$符号并不带它打印。使用前面提供的命令运行目标会出现以下错误:
ls data | grep -E "^[aeiou].*[aeiou]
/bin/sh: 1: Syntax error: Unterminated quoted string
make: *** [Makefile:11: p3] Error 2
当添加一个额外的引号时,我遇到了同样的问题,它会忽略$符号
如果你正在编写一个makefile规则,请在你的问题中包含实际的规则。命令行脚本的行为与makefile中的recipe的行为不是100%相同的。
如果你想让shell接收一个$
,并且你正在编写一个makefile配方,你必须转义它,因为$
是特殊的。写:
list:
ls data | grep -E '^[aeiou].*[aeiou]$$'
注意这里是$$
而不是$
。