BASH_REMATCH无法捕获

mel*_*bic 4 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
Run Code Online (Sandbox Code Playgroud)

输出: Matched!

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

fal*_*tru 5

该脚本指定zsh而不是bash:

#!/bin/bash
       ^^^^
Run Code Online (Sandbox Code Playgroud)

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

setopt KSH_ARRAYS BASH_REMATCH
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

中的等效数组zshmatch

% [[ foo_bar =~ (.*)_(.*) ]]
% print $match[1]
foo
% print $match[2]
bar
Run Code Online (Sandbox Code Playgroud)

  • 如果仍启用“ KSH_ARRAYS”,则需要关闭“ BASH_REMATCH”,并使用“ $ {match [0]}”和“ $ {match [1]}”。 (2认同)