是什么?在嘘吗?


28

如果尝试a;;b在sh中运行,则会收到此错误:

sh: <number>: Syntax error: ";;" unexpected

如果我尝试a;;;b得到相同的错误,而;;;不是,而不是;;,那么我认为这;;意味着一些,尽管我不知道这是什么意思。

这是一个例子:

$ echo A;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A;;;echo B
sh: 1: Syntax error: ";;" unexpected
$ echo A; ;echo B
sh: 1: Syntax error: ";" unexpected

在这里您可以看到,我使用; ;而不是;;错误时有所不同,这与我;以前没有使用命令的事实有关。;;似乎是一个不同的运算符,尽管我不知道它适用于什么。


1
由于存在;;,因此无法在Google上搜索,并且在这里没有找到重复对象。
EKons

3
用谷歌搜索“ sh双分号” ... stackoverflow.com/questions/16905183/…–
muru

@muru虽然我没有在这里发布,但我认为。
EKons

这就是SymbolHound用于symbolhound.com的意思
Joe Joe

Answers:


47

;;在POSIX shell 中的case... esac构造中分隔语句:

case foo in (a) cmd1; cmd2 ;; (b) cmd3; cmd4; esac

要查找有关命令的信息,可以运行man that-command。如果您的寻呼机是less,您可以按来在手册页中搜索/

在这里,您将运行man sh并搜索;;。一些炮弹支持其他运营商不同的case语句(如;&ksh93/ zsh/ bash/mksh&|in zsh/ mksh;;&in bash)。


1
我刚刚在这里发布,是因为我认为无论如何应该存在这样的问题,因为如果有人感到困惑,可以在这里以更清晰的方式进行解释。
EKons

2
如果有很多热门歌曲,或者您忘记了用进行转义的搜索规则less,这有时会很方便$ man bash|grep -C1 ';;'
默默地解决问题,2017年

您不应该(a)和之前拥有b),而在;;之后需要cmd4
Barmar

@Barmar,该语法为POSIX。在Bourne外壳程序中,您必须省略(确实的内容,但是您仍然不需要;;以前的内容esac(尽管它没有害处)。
斯特凡Chazelas

谢谢。我不知道POSIX shell中的更改,或者最后一个;;是可选的。
Barmar '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.