我正在尝试将 bash 脚本的参数与正则表达式相匹配
mykill.bash [-l] [-s SIGNO] pattern1 pattern2
我正在使用这个表达式:
regex = ^(-l)?(\s-s\s[0-9]+)?(\s[a-zA-Z0-9]+){1,2}$ <br>
if [[ $@ =~ $regex ]]; then echo 'cool'
例如 ./mykill.bash -l -s 33 abc 给出 $@='-l -s 33 abc'
它通过了 debuggex.com 测试(见图片
但它在我的脚本中不起作用
最佳答案
您遇到的是 bash 问题,而不是正则表达式问题。
在 bash 中分配变量时:=
两边不要有空格。
然后,如果您想在正则表达式中保留反斜杠和空格,请在其周围使用单引号,否则 bash 会把它们当作早餐吃掉。你不需要引用酷。并用 fi
关闭 if
。
regex='^(-l)?(\s-s\s[0-9]+)?(\s[a-zA-Z0-9]+){1,2}$ <br>'
if [[ $@ =~ $regex ]]; then echo cool; fi
或者使用更简单的条件形式:
[[ $@ =~ $regex ]] && echo cool
关于regex - 在 bash 中匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18779348/