我是否需要“| xargs -n 1”来解决 xargs' -I 副作用?

我是否需要“| xargs -n 1”来解决 xargs' -I 副作用?

我很惊讶地发现这一点:

$ echo 1 2 3 4 5 | xargs -n 1 echo
1
2
3
4
5

$ echo 1 2 3 4 5 | xargs -n 1 -I FOO echo FOO
1 2 3 4 5

也就是说,使用该-I标志有以下副作用:

此外,不带引号的空格不会终止输入项;相反,分隔符是换行符。

所以我看到的解决方法是:

$ echo 1 2 3 4 5 | xargs -n 1 | xargs -n 1 -I FOO echo FOO
1
2
3
4
5

有更好的解决方法吗?

我的实际命令行如下所示:

echo 102DRIFT 103DRIFT 104DRIFT 105DRIFT | xargs -n 1 | xargs -n 1 -I _DIR_ python process.py /SDcard/DCIM/_DIR_/ MyTrace.gpx 10

(Ubuntu Trusty,如果相关的话。)

答案1

GNU xargs,您可以使用-d选项:

$ echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO
1
2
3
4
5

答案2

xargs我认为你根本不需要:

for DCIM in /SDcard/DCIM/10[2-5]DRIFT/
do  python process.py "$DCIM" MyTrace.gpx 10
done

除此之外,您还可以做一些其他事情:

printf 10%dDRIFT\\n 2 3 4 5 | ...the rest...

或者,如果您的输入中没有任何引号......

IN | tr \  \\n | xargs ... the rest ...

答案3

不幸的是, echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO从 cuonglm 的答案来看,不知何故又创建了一个空行并执行命令 6 次而不是 5 次。

我的解决方案是使用以下解决方法:

echo 1 2 3 4 5 | tr ' ' '\n' | xargs -I FOO echo FOO

相关内容