我正在尝试开发一个在 zsh 和 bash 中运行的脚本(即,执行相同的操作:-))。问题是,在某个时刻,zsh 特定部分包含一个带有 的模式(N)
。所以:this_pattern*(N)
。在 zsh 中,如果没有匹配项,则模式不存在。
Bash 对此表示,“意外符号导致语法错误”。请注意,bash 上的执行永远不会发生在这个 zsh 特定部分上,并且此错误消息是由解析代码引起的!
我可以以某种方式帮助 bash 吃掉它,例如不解析它吗?
我正在尝试开发一个在 zsh 和 bash 中运行的脚本(即,执行相同的操作:-))。问题是,在某个时刻,zsh 特定部分包含一个带有 的模式(N)
。所以:this_pattern*(N)
。在 zsh 中,如果没有匹配项,则模式不存在。
Bash 对此表示,“意外符号导致语法错误”。请注意,bash 上的执行永远不会发生在这个 zsh 特定部分上,并且此错误消息是由解析代码引起的!
我可以以某种方式帮助 bash 吃掉它,例如不解析它吗?
来自
zsh_expn
:因此,bash 方法是
nullglob
为该模式设置选项。会起作用,并仅为 . 生成的子 shell 设置该选项
(…)
。(要么shopt
失败setopt
,要么分别作为 bash 和 zsh 内置,但有效的设置选项使没有匹配的模式消失而不会出现错误。&&
并且||
具有从左到右的评估。)请注意,这当然缺乏美感(抱歉,@StéphaneChazelas!),并且子 shell 的创建会带来性能损失。但您想要可移植性,因此您无法真正使用 zsh 特定的功能。