BASH_REMATCH 没有捕获

BASH_REMATCH doesn't capture

我正在尝试捕获 bash 中路径的一部分:

输入:/Users/foo/.virtualenvs/venv-test-server

代码:

#!/bin/zsh
regex="^.*\/venv-(.*)$"
if [[ $VIRTUAL_ENV =~ $regex ]] ; then
  echo "Matched!"
  echo ${BASH_REMATCH[1]}
fi

输出:Matched!

但是没有打印匹配项。为什么?

脚本指定 zsh 而不是 bash:

#!/bin/bash
       ^^^^

如果你想使用zsh,你需要在使用=~之前设置BASH_REMATCH选项:

setopt KSH_ARRAYS BASH_REMATCH

zsh 中的等效数组是 match:

% [[ foo_bar =~ (.*)_(.*) ]]
% print $match[1]
foo
% print $match[2]
bar