【发布时间】:2022-10-23 12:16:19
【问题描述】:
我有一组看起来像这样的 shell 命令
if check-some-condition $a then;
do stuff
run-exit-code $a
fi
其中check-some-condition 和run-exit-code 可以替换为采用单个参数$a 的函数,而do stuff 是可能几个shell 命令的占位符。是否可以模拟我可以编写的宏的 Lisp 功能
(my-macro $a stuff)
并将其替换为上面的代码吗?我正在使用 Bash,但如果它们具有使这更容易的功能,我可以使用任何其他 shell。起初我想使用函数,但我认为我不能传入一个命令块。
【问题讨论】:
-
不,shell 没有宏预处理器。您可以编写一个使用
eval的shell 函数。 -
@ptdecker 我可以使用任何工具。 M4会是这样做的规范方式吗?
-
M4 是一个通用的宏处理器。您可能需要通过它来传输整个脚本。
-
PowerShell 支持脚本块,但在不知道
check-some-condition和run-exit-code做什么的情况下,很难说将它们转换为 PowerShell 有多么容易(这与传统的 unix shell 完全不同)。