我想在我的 bash 脚本中使用正则表达式,如下面的代码:
REGEX='^\s*-.*|^\s*file:\s*["'\''].*'
if [[ ${LINE} =~ ${REGEX}.* ]]; then
# TODO
fi
如果我在 Windows 中的脚本中执行此操作,它可以正常工作。但如果我使用 shellspec(bash 测试工具),它就不起作用。我读到 bash 不喜欢它周围的正则表达式的引号。但如果我不使用它们,我就会因为这个
["'\'']
而收到错误。那么我该怎么做呢?
让我们整理一下你的正则表达式,修复你的变量大写,并提供一些示例输入/输出:
$ cat tst.sh
#!/usr/bin/env bash
regex='^[[:space:]]*(-|file:[[:space:]]*["'\''])'
while IFS= read -r line; do
if [[ $line =~ $regex ]]; then
rslt='matched'
else
rslt='did not match'
fi
printf '%-20s%s\n' "$line" "$rslt"
done <<'!'
-
-
foo
file:"
file: '
file:bar
!
$ ./tst.sh
- matched
- matched
foo did not match
file:" matched
file: ' matched
file:bar did not match
这似乎有效,如果您不同意,请告诉我们有关该问题的更多信息。