我试图找到在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'
但我不明白有什么区别。
;;
是什么意思,什么时候应该使用?
;;
仅用于case
构造,以表示替代方案的结束。 (它存在于C中有break
的地方)
case $answer in
yes) echo 'yay!';;
no) echo 'boo!';;
esac
从语法上讲,;
和&
都标志着一个命令的结束。换行符相当于;
,在第一个近似值中。它们之间的区别在于;
或newline表示该命令必须在前台执行,而&
表示该命令必须在后台执行。
所以在这里你需要& wait
。 & ;
是一个语法错误(你不能有一个空命令)。 & ;;
也是一个语法错误;灰烬让它去(就像你写的只是&
),但bash抱怨。显然你的sh是一些灰变体(例如破折号,这是许多Debian衍生物上的/bin/sh
)。
它应该用在案例之间的case
声明中。你在这里遇到的问题是&
和;
都是命令分隔符,你应该只使用其中一个。