【问题标题】:How can I suppress zsh pattern escaping during string expansion?如何在字符串扩展期间抑制 zsh 模式转义?
【发布时间】:2021-10-06 20:40:51
【问题描述】:

我正在尝试将此 sn-p 代码从 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 string-matching variable-expansion


    【解决方案1】:

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

    local marks=a pattern='[ab]'
    
    case $marks in
       ( $~pattern )
          echo match
       ;;
    esac
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多