echo abc > abc.txt
cat abc.txt > def.txt
两个命令看起来很像,区别只是命令后面的参数,一个是字符串,一个是文件名。
但是这两个命令最近让我很迷糊。之前我想要通过管道把一段字符输出,会写成:echo abc | echo 没有输出,但是想不出哪里有问题。正确到写法是: echo abc | cat
是哪里到问题呢?原因在于echo 不是一个过滤器。echo 后面接受参数, 例如 echo a b c,接受3个参数,输出结果是“a b c“,中间的多个空格被当作是参数的空白符间隔。echo “a b c” 的话就是一个参数。但是echo 只接受参数,不能当作过滤器使用。echo < abc.txt 是不行的。echo abc | echo 自然也不行。cat 是一个过滤器,常用的写法 cat abc.txt 其实是省略了重定向符号(理解成参数也行),完整的应该写成:cat < abc.txt
虽然是两个简单的命令,没有区别清楚的话反倒会让人觉得混乱。