如何在字符串扩展期间抑制 zsh 模式转义?

How can I suppress zsh pattern escaping during string expansion?

我正在尝试将这段代码从 bash 移植到 zsh:

#! /usr/bin/env bash  # change zsh

set -x

pattern="[ab]"
marks="a"

case "${marks}" in
   ${pattern})
      echo match
   ;;
esac

这会打印“匹配”。

Bash 原样替换 ${pattern},然后使用 [ab] 匹配 'a''b' .

zsh 似乎转义了 '[]' 字符,然后使用 \[ab\] 逐字匹配该字符串。

我没有看到 zsh 选项,如何更改行为和硬编码模式不是一个选项。

要使 zsh 将参数值视为模式,而不是文字字符串,您需要使用 glob substitution:

local marks=a pattern='[ab]'

case $marks in
   ( $~pattern )
      echo match
   ;;
esac