我知道使用GNU m4undivert
是可能的,以及其他使用paste
的实现。但是,有没有办法做到这一点,而不是特定于实现?
您可以使用syscmd
宏调用外部命令。
syscmd(`cat hello.c')dnl
注意:在分流中插入的文本被M4扫描,所以你不能手动复制文件的内容。
$ m4 foo
define(`foo', `FOO')dnl
divert(`1')dnl
foo
divert`'dnl
The quick brown fox jumped over the lazy dog.
undivert(`1')dnl
=> The quick brown fox jumped over the lazy dog.
=> FOO
扩展另一个答案,也undivert(path/to.txt)
工作,但可能只与gnu m4。正如@uzsolt的注释所说,它违反了posix标准(在posix标准上,唯一可接受的参数是一个介于0到9之间的数字,包含一个临时缓冲区)。