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

时间:2013-12-09 14:37:02

标签: shell zsh jobs

在zsh的手册中,在Jobs& amp;信号,它说:

  

如果作业以&|&!开始,则该作业会立即被取消。

立即取消工作的两种方式之间是否存在一些差异?如果没有,那为什么有两种不同但非常相似的方式呢?

1 个答案:

答案 0 :(得分:3)

有区别吗?

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

然后我看了一下代码,答案就在于此。在令牌列表中有

...
"&|",       /* AMPERBANG      30 */
...

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

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

为什么有两个不同的令牌具有相同的含义?

从代码中看,它看起来像是与键盘相关的东西。在代码中有很多地方使用这两个相同的含义(字面上if (d == '!' || d == '|')出现很多次。我发现的唯一与键盘相关的原因是,显然,在瑞士键盘上,你可以键入|使用AltGr+1美国(和类似)布局中的感叹号由Shift+1生成。我发现了其他原因,但由于用户的受众较少,因此极不可能。