Dash双分号(;;)语法

问题描述 投票:36回答:2

我试图找到在sh中并行运行多个命令并等待它完成的方法。

我发现以下不起作用(sh: 1: Syntax error: ";" unexpected):

sh -c '(sleep 3 && echo 1) & ; (sleep 3 && echo 2) & ;  wait'

但是这种语法按预期工作:

sh -c '(sleep 3 && echo 1) & ;; (sleep 3 && echo 2) & ;;  wait'

但我不明白有什么区别。

;;是什么意思,什么时候应该使用?

syntax sh dash-shell
2个回答
56
投票

;;仅用于case构造,以表示替代方案的结束。 (它存在于C中有break的地方)

case $answer in
  yes) echo 'yay!';;
  no) echo 'boo!';;
esac

从语法上讲,;&都标志着一个命令的结束。换行符相当于;,在第一个近似值中。它们之间的区别在于;或newline表示该命令必须在前台执行,而&表示该命令必须在后台执行。

所以在这里你需要& wait& ;是一个语法错误(你不能有一个空命令)。 & ;;也是一个语法错误;灰烬让它去(就像你写的只是&),但bash抱怨。显然你的sh是一些灰变体(例如破折号,这是许多Debian衍生物上的/bin/sh)。


8
投票

它应该用在案例之间的case声明中。你在这里遇到的问题是&;都是命令分隔符,你应该只使用其中一个。

© www.soinside.com 2019 - 2024. All rights reserved.