相关疑难解决方法(0)

将正则表达式存储在 shell 变量中如何避免引用 shell 特有的字符时出现问题?

来自Bash 手册

将正则表达式存储在 shell 变量中通常是避免引用 shell 特殊字符时出现问题的有用方法。有时很难在不使用引号的情况下从字面上指定正则表达式,或者在注意 shell 的引号删除的同时跟踪正则表达式使用的引号。使用 shell 变量来存储模式可以减少这些问题。例如,以下是等效的:

pattern='[[:space:]]*(a)?b'
[[ $line =~ $pattern ]]
Run Code Online (Sandbox Code Playgroud)

[[ $line =~ [[:space:]]*(a)?b ]]
Run Code Online (Sandbox Code Playgroud)

如果要匹配正则表达式语法中的特殊字符,则必须将其引用以去除其特殊含义。这意味着在模式中xxx.txt, the.匹配字符串中的任何字符(其通常的正则表达式含义),但在模式中"xxx.txt"它只能匹配一个字面量.。Shell 程序员应该特别注意反斜杠,因为 shell 和正则表达式都使用反斜杠来删除后面字符的特殊含义。以下两组命令是不等价的:

pattern='\.'

[[ . =~ $pattern ]]
[[ . =~ \. ]]

[[ . =~ "$pattern" ]]
[[ . =~ '\.' ]]
Run Code Online (Sandbox Code Playgroud)

前两个匹配会成功,但后两个不会成功,因为在后两个中,反斜杠将是要匹配的模式的一部分。在前两个示例中,反斜杠从 中删除了特殊含义.,因此文字.匹配。如果第一个示例中的字符串不是.,例如a,则模式将不匹配,因为.模式中的引号失去了匹配任何单个字符的特殊含义。

如何将正则表达式存储在 shell 变量中是一种避免引用 shell 特殊字符时出现问题的有用方法?

给出的例子似乎没有解释这一点。在给定的示例中,一种方法中的正则表达式文字和另一种方法中的 shell …

bash regular-expression

10
推荐指数
2
解决办法
1万
查看次数

如何使用正则表达式检查 bash 中 0-5 之间的输入

用于检查某个范围内的单个数字的正则表达式模式是什么?我正在尝试以下模式,该模式在测试时似乎有效 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)

bash shell-script regular-expression

1
推荐指数
1
解决办法
255
查看次数

标签 统计

bash ×2

regular-expression ×2

shell-script ×1