在bash中按空间将字符串拆分为并行管道

在bash中按空间将字符串拆分为并行管道,bash,parallel-processing,gnu-parallel,Bash,Parallel Processing,Gnu Parallel,我有一段bash代码,它在以空格分隔的字符串中的文件名上循环。然后对每个文件名运行一个函数。看起来是这样的: TCURR=0 for F in $FILES; do TCURR=$[TCURR + 1] do_something $TCURR $F & done wait 如何使gnu并行工作?我不知道如何通过管道将$FILES变量导入其中,使其工作 这是我试过的,两种方法都不管用。我是根据平行示例页上的内容编写的。为了简单起见,我只是将1而不是TCURR作为第一个变量发送给函

我有一段bash代码,它在以空格分隔的字符串中的文件名上循环。然后对每个文件名运行一个函数。看起来是这样的:

TCURR=0
for F in $FILES; do
  TCURR=$[TCURR + 1]
  do_something $TCURR $F &
done
wait
如何使gnu并行工作?我不知道如何通过管道将$FILES变量导入其中,使其工作

这是我试过的,两种方法都不管用。我是根据平行示例页上的内容编写的。为了简单起见,我只是将1而不是TCURR作为第一个变量发送给函数,尽管我也想知道如何做到这一点

$FILES | parallel“dou_something 1{}”


echo$FILES | parallel“do_something 1{}”

解决了这个问题,只需要在变量周围加引号。所以它看起来像:

echo“$FILES”| parallel“do_something 1{}”


虽然我还没有弄明白如何让计数器工作,但您可能想要:

#!/bin/bash
FILES=....
TCURR=0
for F in $FILES; do
    ((TCURR++))
    echo do_something $TCURR $F 
done | parallel

真棒不知道你可以用{#}作为计数器。
parallel do_something {#} {} ::: $FILES