如果我想查看一个字符串是否是字母数字并且短于某个值,比如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教程后,我相信它无法完成。我错了吗?有什么方法可以解决这个问题吗?
答案 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