3

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

4

1 回答 1

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
于 2013-07-02T15:58:04.377 回答