为何使用cat命令合并文件与Here Doc时,Here Doc内容被忽略?
问题原因解析
你的命令里cat忽略Here Doc的核心原因是**cat的输入优先级规则**:
- 当
cat接收到文件名参数(比如这里的test.txt)时,它会依次读取这些指定文件的内容,执行完成后直接退出,不会再读取标准输入(stdin)。 - 你通过
<<END定义的Here Doc,本质是将内容传入cat的标准输入,但此时cat已经处理完test.txt这个文件参数,没有去读取标准输入的逻辑了,所以Here Doc的内容完全被忽略。
对比你预期的cat file.txt file1.txt > /tmp/combined.txt,这里两个都是文件名参数,cat会按顺序读取所有指定文件,所以能合并内容;而你的命令里Here Doc是标准输入,不属于文件名参数范畴,自然不会被cat处理。
如果要让cat同时读取文件和Here Doc,需要显式告诉它要读取标准输入,比如在参数里加上-(-在cat中代表标准输入):
cat test.txt - <<END > /tmp/combined.txt This is heredoc END
这样cat会先读test.txt,再读标准输入(也就是Here Doc的内容),最终合并到目标文件里。
内容的提问来源于stack exchange,提问作者move_slow_break_things
相关产品推荐
相关产品推荐

