Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop BASH:无法将循环中的命令作为作业运行_For Loop_Jobs - Fatal编程技术网

For loop BASH:无法将循环中的命令作为作业运行

For loop BASH:无法将循环中的命令作为作业运行,for-loop,jobs,For Loop,Jobs,似乎我错过了什么,但我对我的剧本感到绝望。。通过测试,我得出结论,这个简单的脚本不起作用: for i in 1 2; do sleep 2 &; done 当我把“完成”和反斜杠放在新的一行时,它工作得很好。为什么我不能从一行脚本运行作业,有什么合乎逻辑的解释吗?这是否意味着“&”不期望任何事情发生 for i in 1 2; do sleep 2 &\ > done [1] 18862 [2] 18863 感谢您的建议您遇到了shell语法的一个奇怪

似乎我错过了什么,但我对我的剧本感到绝望。。通过测试,我得出结论,这个简单的脚本不起作用:

for i in 1 2; do sleep 2 &; done
当我把“完成”和反斜杠放在新的一行时,它工作得很好。为什么我不能从一行脚本运行作业,有什么合乎逻辑的解释吗?这是否意味着“&”不期望任何事情发生

for i in 1 2; do sleep 2 &\
> done
[1]     18862
[2]     18863

感谢您的建议

您遇到了shell语法的一个奇怪的角落。你真正想要的是

for i in 1 2; do sleep 2 & done
没有
之后。你可以在这里加一个新行(正如你所发现的),但这不是必须的

至于为什么这里不能有分号,这是命令列表定义方式的一个奇怪产物——它们是由标记分隔的一个或多个管道
和&
|
。但是,在列表中,您不能有任何空命令,因此当您有
&之间没有任何内容,这是列表中间的一个空命令。< /P>

请注意,您可以在其他位置使用空命令。此外,您可以在上述任何分隔符之后有一个或多个换行符,或者代替
。因此,看起来你可以在任何地方使用空命令,但事实证明,有些地方它们不起作用(并且会导致语法错误)

这似乎总是有点奇怪。