和有什么区别!和&| 在 zsh 中?

Mar*_*ary 4 shell jobs zsh

在 zsh 手册的“作业和信号”部分中,它说:

如果某个作业以&|或开始&!,则该作业将立即被否认。

立即放弃工作的两种方式有什么区别吗?如果不是,那么为什么有两种不同但非常相似的方法呢?

ner*_*ert 5

有区别吗?

有趣的问题。我克隆了 git 存储库,开始查找它的添加位置,我发现将信息添加到手册中的提交是初始提交。这可能意味着 CVS 的更改并未通过保留提交来完成,但当我看到提交是从 2009 年开始时,我没有进一步查看。

然后我查看了代码,答案就在那里。在代币列表中有

...
"&|",       /* AMPERBANG      30 */
...
Run Code Online (Sandbox Code Playgroud)

当解析器接近&符号并看到“!”时 或“|” 之后,它会AMPERBANG在读取令牌时自动返回。从这一点来看,两者没有区别。

我想我对你的回答是,在当前版本的 ZSH 中,这两者没有区别

为什么有两个不同的标记具有相同的含义?

从代码来看,好像是和键盘相关的东西。代码中有很多地方这两者具有相同的含义(实际上if (d == '!' || d == '|')在那里出现了很多次。我发现的唯一与键盘相关的原因是,显然,在瑞士键盘上,您可以|使用AltGr+1Where in US进行输入(和类似的)布局感叹号是由 产生的Shift+1。我发现了其他原因,但由于其用户受众范围狭窄而极不可能。