如何使 bash 可以使用 zsh 的 (N) 个模式?

pet*_*erh 4 scripting bash zsh shell-script syntax

我正在尝试开发一个在 zsh 和 Bash 中运行(并且理想情况下执行相同的操作:-) 的脚本。问题是,在某个时刻,zsh 特定部分包含以 结尾的模式(N)。所以:this_pattern*(N)。在 zsh 中,如果没有匹配项,这会使模式扩展为空。

Bash 对此表示,“意外符号导致语法错误”。请注意,Bash 上的执行永远不会发生在 zsh 特定部分上,并且此错误消息是由解析代码引起的!

我能否以某种方式帮助 Bash 吃掉它,例如不解析它?

Mar*_*ler 5

zsh_expn

\n
\n
  N      sets the NULL_GLOB option for the current pattern\n
Run Code Online (Sandbox Code Playgroud)\n
\n

因此,bash 方法是nullglob为该模式设置选项。

\n
( shopt -s nullglob || setopt NULL_GLOB && yourcommand this_pattern* )\n
Run Code Online (Sandbox Code Playgroud)\n

会起作用,并仅为 . 生成的子 shell 设置该选项(\xe2\x80\xa6)。(要么shopt失败setopt,要么分别作为 bash 和 zsh 内置,但有效的设置选项使没有匹配的模式消失而不会出现错误。&&并且||具有从左到右的评估。)

\n

请注意,这当然缺乏美感(抱歉,@St\xc3\xa9phaneChazelas!),并且子 shell 的创建会带来性能损失。但您想要可移植性,因此您无法真正使用 zsh 特定的功能。

\n