BASH_REMATCH无法捕获

时间:2015-07-29 08:49:44

标签: regex bash zsh

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

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

代码:

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

输出:Matched!

但是比赛没有打印出来。为什么呢?

2 个答案:

答案 0 :(得分:5)

脚本指定zsh而不是bash

#!/bin/bash
       ^^^^

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

setopt KSH_ARRAYS BASH_REMATCH

答案 1 :(得分:4)

zsh中的等效数组是match

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