将 bash =~ 运算符更改为 sh 兼容参数

Changing the bash =~ operator to a sh compatible argument

所以我是 运行 核心 os 中的一个 bash 脚本,因此我没有 /bin/bash 但是我有 /bin/sh。现在 sh 一直很好,直到我使用别人的 bash 脚本并且他们有以下行。

 if [[ "$file" =~ ^https?:// ]]; then

和我的 os 抱怨 sh: =~: unknown operand 现在我假设这意味着 ~= 运算符与 sh 不兼容但是必须有一些其他的方式来做这个表格看起来所以我发现 ~= 是某种正则表达式运算符。我的问题是,我可以用一些东西替换 ~= 吗?注意:我的机器上有 grep。

您可以将其重写为 case 命令:

case "$file" in
    http://* | https://* )
        # ...
        ;;
esac

您可以调用 expr 进行基本正则表达式匹配:

if expr match "$file" 'https\?://'; then

模式隐式锚定到字符串的开头。

I have grep on my machine

按照上面的行,您可以使用 if 语句编写一个简单的条件,如

if echo "$file" | grep -Eq "^https?://"; then
    printf 'regex matches\n'
fi

grep 中的正则表达式匹配使用 ERE(扩展正则表达式),它在您安装的任何 POSIX compliant grep 中都可用。 -q 仅抑制打印的正常标准输出,但仅 returns 退出代码以了解匹配是否成功。

即使你有的grep的某些包不允许-E,只使用基本的正则表达式支持,但剥夺?的特殊值并传递它字面上

if echo "$file" | grep -q "^https\?://"; then