Bash pandoc定义函数扩展错误

Bash expansion error defining function with pandoc

我正在使用 advice here 设置别名以使用命令将 markdown 转换为 man 样式输出,

alias mdless="pandoc -s -f markdown -t man \!* | groff -T utf8 -man | less"

我一直收到错误消息:pandoc: !*: openFile: does not exist (No such file or directory)

但是如果我只做命令的话就可以了 pandoc -s -f markdown -t man README.md | groff -T utf8 -man | less

这个 bash 扩展语法有问题吗?

该示例是 tcsh 别名而不是 bash 别名。这就是为什么您需要添加 = 原始文件必须添加到您的文件才能使其正常工作的原因。

问题是 tcsh(显然)从它在双引号字符串中看到的历史扩展感叹号中删除了转义反斜杠:

tcsh$ echo "\!*"
!*

bash(出于某些我一直不明白的原因)并没有这样做:

bash$ echo "\!*"
\!*

我不确定您能否在 bash 中获得该别名的精确副本,因为我认为 bash 不会对别名扩展进行历史扩展,因此您可以获得最接近的是一个将文件作为参数的函数:

mdless() {
    pandoc -s -f markdown -t man "$@" | groff -T utf8 -man | less
}