了解Linux参数和pipe道

所以我试图用sh(Bourne Shell)写一些脚本。 我一直陷入这个混乱。 对于以下内容:

1. rm `echo test` 2. echo test | rm 

我知道反引号是用来先运行命令,好的。 但是对于#2的pipe道系统,为什么不把这个testing作为一个参数呢? 有没有关于pipe道系统我不明白? 我以为这只是发送一个命令的输出作为input到另一个。

和…有关我的pipe道混乱也许。

 dir=/blah/blar/blar files=`ls ${dir} -rt` count=`wc -l $files` # doesn't work, in fact it's running it along with each file that exists count2=`$files | wc -l` # doesn't work 

为什么我不能将ls存储到“文件”中并使用它?

你需要在那里使用xargs ,因为rm需要参数来删除,它不会从STDIN (管道通常是管道)读取数据。

 echo test | xargs rm 

第一个工作,因为反引号替换,很像${}但不是那么容易。 🙂

或者,您可以使用find

 find . -name test -exec rm -f '{}' \; 

在第一种情况下, echo test (字符串test )的结果作为rm的命令行参数提供。 在第二个字符串test正在通过管道传输rm进程的stdin文件描述符。 这是两个完全不同的东西。 由于rm不从标准输入读取,它从来没有看到test