GREP:正则表达式中的变量

时间:2013-07-02 15:56:50

标签: regex bash grep

如果我想查看一个字符串是否是字母数字并且短于某个值,比如10,我会这样做(在BASH + GREP中):

if grep '^[0-9a-zA-Z]\{1,10\}$' <<<$1 ; then ...

(顺便说一句:我正在检查1美元,即第一个参数)

如果我希望将值10写在变量上,例如

,该怎么办?
UUID_LEN=10
if grep '^[0-9a-zA-Z]\{1,$UUID_LEN\}$' <<<$1 ; then ...

我尝试了所有类型的转义,大括号等,但无法避免错误消息

grep: Invalid content of \{\}

在谷歌搜索和阅读bash和grep教程后,我相信它无法完成。我错了吗?有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您需要使用双引号,以便shell在将结果参数传递给grep之前扩展参数:

if grep "^[0-9a-zA-Z]\{1,$UUID_LEN\}$" <<<$1 ; then ...

bash可以自行执行正则表达式匹配,而无需启动另一个进程来运行grep

if [[ $1 =~ ^[0-9a-zA-Z]{1,$UUID_LEN}$ ]]; then