为什么“xargs bash -ic echo”与“xargs echo”或“xargs”不同?

为什么“xargs bash -ic echo”与“xargs echo”或“xargs”不同?

我期待命令

ls -d doc/* | grep -P "<some_pattern>" | xargs bash -ic echo

执行以下操作:

ls -d doc/* | grep -P "<some_pattern>" | xargs echo

也就是说,给我匹配的文件ls -d doc/* | grep -P "<some_pattern>",仅用空格而不是换行符分隔。

但我只得到一个换行符作为输出。

为什么是这样?如何修复第一个命令来执行我想要的操作?

顺便说一句,我确实正在使用zsh而不是bash,但两者都不起作用。

我实际上需要它来打印一堆文件,这些文件的文件名与“grep”指定的模式匹配,并且应该使用.zshrc-aliased 命令打印。

答案1

来自 bash 联机帮助页

   -c string If the -c option is present,  then  commands  are  read  from
             string.   If  there  are arguments after the string, they are
             assigned to the positional parameters, starting with $0.

所以...

 $ echo a b c d e f g | xargs bash -ic echo

 $ echo a b c d e f g | xargs bash -ic 'echo $0 $@'
 a b c d e f g

相关内容