假设我有一些命令的输出(比如ls -1):
a
b
c
d
e
...
我想依次对每一个应用一个命令(比如echo)。如。
echo a
echo b
echo c
echo d
echo e
...
在bash中最简单的方法是什么?
假设我有一些命令的输出(比如ls -1):
a
b
c
d
e
...
我想依次对每一个应用一个命令(比如echo)。如。
echo a
echo b
echo c
echo d
echo e
...
在bash中最简单的方法是什么?
当前回答
你可以在每一行上使用一个基本的前置操作:
ls -1 | while read line ; do echo $line ; done
或者你可以将输出管道到sed进行更复杂的操作:
ls -1 | sed 's/^\(.*\)$/echo \1/'
其他回答
你可以在每一行上使用一个基本的前置操作:
ls -1 | while read line ; do echo $line ; done
或者你可以将输出管道到sed进行更复杂的操作:
ls -1 | sed 's/^\(.*\)$/echo \1/'
for s in `cmd`; do echo $s; done
如果cmd有一个大的输出:
cmd | xargs -L1 echo
你可以使用for循环:
for file in * ; do echo "$file" done
注意,如果所讨论的命令接受多个参数,那么使用xargs几乎总是更有效,因为它只需要生成所讨论的实用程序一次,而不是多次。
一个解决方案,工作的文件名中有空格,是:
ls -1 | xargs -I %s echo %s
下面是等价的,但是前体和你实际想做的事情之间有一个更清晰的界限:
ls -1 | xargs -I %s -- echo %s
其中echo是你想要运行的任何东西,后面的%s是文件名。
感谢Chris Jester-Young对一个重复问题的回答。
使用xargs可能是最简单的。在你的情况下:
ls -1 | xargs -L1 echo
-L标志确保正确读取输入。从xargs的手册页:
-L number
Call utility for every number non-empty lines read.
A line ending with a space continues to the next non-empty line. [...]