使用linux中的$ sign访问每一行

时间:2012-01-10 05:38:17

标签: linux bash unix pipe sh

每当我执行输出多行的linux命令时,我想对输出的每一行执行一些操作。我一般都是

command something | while read a
do
  some operation on $a;
done

这很好用。但我的问题是,是否有一些我可以通过预定义的符号访问每一行(不知道如何调用它)///像$这样的东西? ..或.. $! ..或.. $ _

可以吗

cat to_be_removed.txt | rm -f $LINE

在bash中是否有预定义的$ LINE ..或者前一个是最短路径。即

cat to_be_removed.txt | while read line; do rm -f $line; done;

3 个答案:

答案 0 :(得分:7)

xargs正在寻找:

cat to_be_removed.txt | xargs rm -f

如果使用那个文件名,请注意文件名中的空格。有关详细信息,请查看xargs man page

答案 1 :(得分:5)

您可能正在寻找xargs命令。

它接受控制参数,加上命令和可选的命令参数。然后它读取它的标准输入,通常在空白区域分割,然后安排重复执行带有给定参数的命令,并从标准输入读取尽可能多的“文件名”,以适应命令行。

答案 2 :(得分:2)

 rm -f $(<to_be_removed.txt)

这是有效的,因为rm可以将多个文件作为输入。它还可以提高效率,因为您只需拨打rm一次,而无需创建catxargs

的管道

另外,不要在while循环中使用管道,而是可以通过使用进程替换来避免子shell:

while read line; do
  some operation on $a;
done < <(command something)

通过避免子shell获得的额外好处是,您在循环内更改的变量也会在循环外部保持其更改的值。使用管道形式时不是这种情况,这是常见的问题。