regex - 在 bash 中匹配正则表达式

标签 regex bash

我正在尝试将 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 测试(见图片 但它在我的脚本中不起作用

enter link description here

最佳答案

您遇到的是 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/

相关文章:

bash - unix命令从单词的第一次出现和最后一次出现之间获取行并写入文件

regex - 如何在没有灾难性回溯的情况下编写此正则表达式

javascript - _.where 对象中的 RegExp 返回空 lodash

c# - 防止 RegEx 中的重复匹配

javascript - String.Replace 仅替换第一次出现的匹配字符串。如何替换*所有*事件?

linux - bash 脚本中的 "unexpected operator"(正则表达式)

bash - 为什么这个命令不起作用 : cd `echo -n " ~"`

c# - 你能建议一个正则表达式来捕获这段文字吗?

bash - makefile循环变量

bash - 为什么重定向(<)不创建子shell