shell cmd:“seq 1 9 | touch”不起作用?

时间:2013-12-29 14:45:54

标签: bash shell

我只想创建一个名为1到9的新文件。 但为什么

% seq 1 9 | touch

不起作用? 和

% seq 1 9 | xargs touch

% touch $(seq 1 9)

的工作。但为什么呢?

2 个答案:

答案 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