bash - 从 m4 中的 esyscmd 中删除尾随换行符

标签 bash shell m4

我正在使用 m4 创建一些基本的宏,我意识到在使用 esyscmd 时,命令运行时会在字符串中添加一个尾随的新行。

例子:

define(MY_HOSTNAME, esyscmd(`hostname'))
MY_HOSTNAME
Some other text...

渲染:

> my.host.name
>
> Some other text...

(以尾随换行完成)

通过在定义(或 esyscmd)的末尾添加 dnl 似乎没有任何反应,并且仍然有一个尾随换行符。

在 m4 中调用 esyscmd 时删除尾随换行符的最佳方法是什么?

最佳答案

devnull 的例子很好,但是 M4 也有一个内置的 tr。这是我正在做的:

define(CMD_OUTPUT, esyscmd(`sass --style=compressed foo.sass'))
define(NL,`
')
translit(CMD_OUTPUT, NL)

M4 好一点的人可以将其压缩为一个宏。

关于bash - 从 m4 中的 esyscmd 中删除尾随换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20648127/

相关文章:

bash - 您最重要的控制台别名是什么?

Bash Shell 脚本 - 检测 Enter 键

linux - Bash 脚本变量

python - NOAA Weather REST API 在使用 curl 请求时导致错误

preprocessor - GNU-M4 : Strip empty lines

c++ - 如何告诉 AC_SUBST 不要替换参数中的变量?

java - 从 shell 分析 .java 文件

c - 管道实现

bash - `watch docker ps --format` 的优雅方式是什么?

if-statement - 为什么无论如何都要评估 ifelse 宏的 "wrong"表达式?