2013-07-02 141 views
3

如果我想寻找一个字符串是否是字母数字,超过一定值短,说10,我会做这样的(在BASH + GREP):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 \{\} 

我敢确信它不能google搜索和阅读的bash和grep教程后做完了。我错了吗?任何方式来解决这个问题?

+0

的可能重复的[添加grep命令bash脚本](http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

回答

3

你需要使外壳产生的参数传递到grep之前扩展参数用双引号:

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

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

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

当然!答案非常简单!引号“”会和“'扩大内部......的答案”不同。谢谢 –