在后台使用&;运行bash管道命令;符号

在后台使用&;运行bash管道命令;符号,bash,shell,Bash,Shell,上述命令中的语法错误是什么?我还尝试使用{}并用结束管道命令。但同样的错误也会出现…如果您想在后台并行运行所有作业,则应将&放在()中 time for i in `ls /tmp/chunk*`; do (cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) & ;done bash: syntax error near unexpected token `;' 可以在大括号中包含(&I): time for i in `

上述命令中的语法错误是什么?我还尝试使用
{}
并用
结束管道命令。但同样的错误也会出现…

如果您想在后台并行运行所有作业,则应将
&
放在
()

time for i in `ls /tmp/chunk*`; do (cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) & ;done
bash: syntax error near unexpected token `;'

可以在大括号中包含(&I):

time for i in `ls /tmp/chunk*`; do
  (cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10} &)
done

&是一个分隔符,因此是冗余的; 即,删除最终版本

time for i in `ls /tmp/chunk*`; do
  {(cat $i | tr ' ' '\n' | sort | uniq > /tmp/line${i:10}) &};
done
用于i in/tmp/chunk*;执行tr''\n'/tmp/line${i:10}&done

以下答案之间的区别在于
{}
是在当前shell上下文中执行的。
()
创建了一个新的子shell,因此您不会保留变量赋值。谢谢@ICAndividBy0。。。但人们只能接受一个答案。尼斯尼克顺便说一句:D@Tathagata:您可以向上投票给海报10代表。这是因为∧都是命令分隔符:[如何获取此格式最后一个命令的pid?这将不起作用:“uniq_pid=$!”
for i in /tmp/chunk*; do tr ' ' '\n' <$i | sort -u > /tmp/line${i:10}& done