【发布时间】:2014-05-12 08:40:23
【问题描述】:
我正在尝试编写一个适合所有以空格/制表符和单词 Path 开头的行的条件
/sPath.* - simple regexp?
我发现在 Bash 4.* 中应该是这样的:
if [[ $LINE =~ "[[:space:]]Path" ]]
但由于某种原因,这种情况不起作用。
if [[ $LINE =~ [[:space:]] ]]
工作正常,并显示所有带空格/制表符的行。
【问题讨论】:
我正在尝试编写一个适合所有以空格/制表符和单词 Path 开头的行的条件
/sPath.* - simple regexp?
我发现在 Bash 4.* 中应该是这样的:
if [[ $LINE =~ "[[:space:]]Path" ]]
但由于某种原因,这种情况不起作用。
if [[ $LINE =~ [[:space:]] ]]
工作正常,并显示所有带空格/制表符的行。
【问题讨论】:
来自version 3.2 onwards,模式(即正则表达式)不得在 Bash 中引用:
- Bash 中的新功能
...
f。现在将字符串参数引用到 [[ 命令的 =~ 运算符 强制字符串匹配,与其他模式匹配运算符一样。
换句话说,引号被认为是正则表达式本身的一部分(文字")。
另外,最好引用变量$LINE,以防止它为空时出错:
if [[ "$LINE" =~ [[:space:]] ]]
【讨论】:
[[ ... ]] 中没有引用$LINE 会发生什么错误?
最好用:
[[ "$LINE" =~ [[:blank:]] ]]
LINE
[[:blank:]],相当于空格或制表符【讨论】:
[[ "$LINE" =~ [[:blank:]]"Path" ]]
$LINE在开头包含空格
[[ a␣␣␣b =~ "a␣␣␣b" ]](将 ␣ 替换为空格)。