如何在 bash 正则表达式中使用引号?

问题描述 投票:0回答:1

我想在我的 bash 脚本中使用正则表达式,如下面的代码:

REGEX='^\s*-.*|^\s*file:\s*["'\''].*'
if [[ ${LINE} =~ ${REGEX}.* ]]; then
  # TODO
fi

如果我在 Windows 中的脚本中执行此操作,它可以正常工作。但如果我使用 shellspec(bash 测试工具),它就不起作用。我读到 bash 不喜欢它周围的正则表达式的引号。但如果我不使用它们,我就会因为这个

["'\'']
而收到错误。那么我该怎么做呢?

regex windows bash shell syntax-error
1个回答
0
投票

让我们整理一下你的正则表达式,修复你的变量大写,并提供一些示例输入/输出:

$ 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

这似乎有效,如果您不同意,请告诉我们有关该问题的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.