当脚本文件来自 zsh 时,为什么 BASH_REMATCH 返回空?

Seb*_*eth 2 regex bash zsh macos-catalina

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

#!/usr/bin/env bash

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

if [[ $TEXT =~ $REGEX ]]; then 
    echo "Matched ${BASH_REMATCH[1]}"
else
    echo "No match."
fi
Run Code Online (Sandbox Code Playgroud)

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

Matched BAR
Run Code Online (Sandbox Code Playgroud)

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

笏。

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

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

Mar*_*eed 5

当您使用 读取文件时.,它会由您正在运行的任何 shell 执行 - 在这种情况下,您说您在 zsh 中。的名称BASH_REMATCH阵列,顾名思义,具体到bash; 例如,如果您的 shell 是 zsh,则将在这种情况下找到匹配的文本$match[1]。而且我认为 ksh 根本不进行真正的正则表达式匹配。

  • 我认为说“.”是“source”的缩写是一种倒退:“source”(非标准扩展)是“.”(操作的 POSIX 标准化、可移植名称)的更长、更易读的名称。 。 (2认同)