我只想创建一个名为1到9的新文件。 但为什么
% seq 1 9 | touch
不起作用? 和
% seq 1 9 | xargs touch
% touch $(seq 1 9)
的工作。但为什么呢?
答案 0 :(得分:4)
因为touch
读取参数列表而不是标准输入。 Relevant manpage
答案 1 :(得分:4)
> man touch
touch [OPTION]... FILE...
touch
期望在命令行上创建它应该创建的文件列表。
这就是xargs
的作用。这也是你使用的shell扩展$()
所做的。
然而,这不是管道的作用:它将上一个命令的输出重定向到下一个输入;而不是提供的论据。
您可以通过此脚本更好地理解:
echo "Command line: " $*
read input
echo "Input: " $input
然后,您可以尝试运行它以查看两者的处理方式:
> echo "tata" | ./temp.sh toto
Command line: toto
Input: tata