来自Bash 手册
将正则表达式存储在 shell 变量中通常是避免引用 shell 特殊字符时出现问题的有用方法。有时很难在不使用引号的情况下从字面上指定正则表达式,或者在注意 shell 的引号删除的同时跟踪正则表达式使用的引号。使用 shell 变量来存储模式可以减少这些问题。例如,以下是等效的:
Run Code Online (Sandbox Code Playgroud)pattern='[[:space:]]*(a)?b' [[ $line =~ $pattern ]]和
Run Code Online (Sandbox Code Playgroud)[[ $line =~ [[:space:]]*(a)?b ]]如果要匹配正则表达式语法中的特殊字符,则必须将其引用以去除其特殊含义。这意味着在模式中
xxx.txt, the.匹配字符串中的任何字符(其通常的正则表达式含义),但在模式中"xxx.txt"它只能匹配一个字面量.。Shell 程序员应该特别注意反斜杠,因为 shell 和正则表达式都使用反斜杠来删除后面字符的特殊含义。以下两组命令是不等价的:Run Code Online (Sandbox Code Playgroud)pattern='\.' [[ . =~ $pattern ]] [[ . =~ \. ]] [[ . =~ "$pattern" ]] [[ . =~ '\.' ]]前两个匹配会成功,但后两个不会成功,因为在后两个中,反斜杠将是要匹配的模式的一部分。在前两个示例中,反斜杠从 中删除了特殊含义
.,因此文字.匹配。如果第一个示例中的字符串不是.,例如a,则模式将不匹配,因为.模式中的引号失去了匹配任何单个字符的特殊含义。
如何将正则表达式存储在 shell 变量中是一种避免引用 shell 特殊字符时出现问题的有用方法?
给出的例子似乎没有解释这一点。在给定的示例中,一种方法中的正则表达式文字和另一种方法中的 shell …
用于检查某个范围内的单个数字的正则表达式模式是什么?我正在尝试以下模式,该模式在测试时似乎有效
https://regex101.com/。
模式:\b([0-5])\b
预期结果:
输入:2 输出:好的
输入:5 输出:好的
输入:6 输出:无
输入:22 输出:无
test$ ch=2
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=6
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=62
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$ ch=0
test$ [[ $ch =~ \b([0-5])\b ]] && echo "ok" || echo "no"
no
test$
Run Code Online (Sandbox Code Playgroud)
我也尝试过双回:
test$ ch=2
test$ [[ $ch …Run Code Online (Sandbox Code Playgroud)