Bash:避免双括号正则表达式测试中的文件名扩展

时间:2017-10-11 17:03:39

标签: bash

我正在尝试与包含星号的变量进行正则表达式匹配。

Bash中的以下命令集会在运算符左侧的变量中使用星号进行文件名扩展。

test='part1 * part2'
[[ "$test" =~ ^(.+)\ .\ (.+)$ ]] && echo $BASH_REMATCH

结果:part1 FILE1 FILE2 part2

但它应该导致:part1 * part2

我进行了搜索和搜索,但无法弄清楚为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

我在询问时意识到,正则表达式匹配工作正常。双括号内发生 no 扩展。在匹配之后发生扩展,此时回显结果。 $BASH_REMATCH变量包含星号,需要双引号。

正确的命令集是:

test='part1 * part2'
regex='^(.+) . (.+)$'
[[ "$test" =~ $regex ]] && echo "$BASH_REMATCH"

更新:在测试之外设置正则表达式。