我期待命令
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