按 space 拆分字符串以在 bash 中并行传输

Splitting a string by space to pipe into parallel in bash

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

TCURR=0
for F in $FILES; do
  TCURR=$[TCURR + 1]
  do_something $TCURR $F &
done
wait

我怎样才能使它与 gnu 并行工作?我无法弄清楚如何将 $FILES 变量通过管道传递给它,这样它就可以工作了。

以下是我尝试过的方法,但均无效。我将这些基于并行示例页面。为了简单起见,我只是将 1 而不是 TCURR 作为第一个变量发送给函数,尽管我也想知道如何做到这一点。

$FILES | parallel "do_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