所以我试图用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
。