我在这里做错了什么?
试图匹配包含空格、小写字母、大写字母或数字的任何字符串。特殊字符也可以,但我认为这需要转义某些字符。
TEST="THIS is a TEST title with some numbers 12345 and special char *&^%$#"
if [[ "$TEST" =~ [a-zA-Z0-9\ ] ]]; then BLAH; fi
这显然只是测试大写字母、小写字母、数字和空格。但是它不起作用。
更新:
我想我应该更具体一些。这是实际的代码行:
if [[ "$TITLE" =~ [a-zA-Z0-9 $%^\&*#] ]]; then RETURN="FAIL" && ERROR="ERROR: Title can only contain upper and lowercase letters, numbers, and spaces!"; fi
这是错误的内容:
./anm.sh: line 265: syntax error in conditional expression
./anm.sh: line 265: syntax error near `&*#]'
./anm.sh: line 265: ` if [[ ! "$TITLE" =~ [a-zA-Z0-9 $%^\&*#] ]]; then RETURN="FAIL" && ERROR="ERROR: Title can only contain upper and lowercase letters, numbers, and spaces!"; return; fi'
re='...whatever...'; [[ $string =~ $re ]]
(不要加引号--这是少数几种会破坏可以不用引号就能工作的情况之一)。 - Charles Duffy[[ $var =~ .* ]]
用于匹配正则表达式.*
(任何内容)。我猜如果你使用引号,那么引号本身会被视为正则表达式的一部分... - Stéphanepattern='^hello[0-9]*$'
;(2)如果需要进行正则表达式匹配,请勿在双方括号表达式中引用模式,因为引用会禁用正则表达式匹配。即表达式[[ "$x" =~ $pattern ]]
将使用正则表达式进行匹配,而表达式[[ "$x" =~ "$pattern" ]]
会禁用正则表达式匹配,并等同于[[ "$x" == "$pattern" ]]
。 - Trevor Boyd Smith