首页 > 解决方案 > 当脚本文件来自 zsh 时,为什么 BASH_REMATCH 返回空?

问题描述

所以我为自己创建了一个可爱的小 bash 脚本:

#!/usr/bin/env bash

TEXT="FOO BAR"
REGEX="FOO (.+)"

if [[ $TEXT =~ $REGEX ]]; then 
    echo "Matched ${BASH_REMATCH[1]}"
else
    echo "No match."
fi

很基本。如果我运行./cutescript.sh,那么我会得到结果:

Matched BAR

但是,如果我获取脚本,. ./cutescript.sh那么它仍然匹配,但是BASH_REMATCH[1是空的。

笏。

我在 MacOS Catalina 10.15.7 (19H2) 上执行此操作zsh,但使用bashshebang。

任何人都可以解释这种违规行为吗?

标签: regexbashzshmacos-catalina

解决方案


当你用 读取文件时.,它会被你正在运行的任何 shell 执行——在这种情况下,你说你在 zsh 中。顾名思义BASH_REMATCH,数组的名称是特定于bash; 例如,如果你的 shell 是 zsh,那么在这种情况下匹配的文本会被找到$match[1]。而且我认为 ksh 根本不会进行真正的正则表达式匹配。


推荐阅读