Bash 别名历史替换类似于 csh 中的 \!*

Bash 别名历史替换类似于 csh 中的 \!*

我的问题与这篇旧帖子

我想做类似的事情:将当前命令行上输入的最后一个参数放在别名中。这相当于可以csh \!*在别名中使用的。

根据引用的帖子,问题似乎出在 bash 的历史记录扩展上,这就是为什么使用 fc 的原因。这个想法是让替换在命令字符串的中间工作,例如alias cat='cat -n !!:* && echo ""'(作为简化的示例,由于扩展问题,它不起作用)。

但是,这与引用的帖子不同,因为我只想抓取第一个命令之外的参数(即在帖子中,它们抓取整行,而不是除了第零个参数,即命令本身之外的整行)。

在 bash 别名中执行此操作的最佳方法是什么?(注意:将其保留为别名,而不是寻找脚本或函数)。

答案1

除了简单的单命令替换之外,最好避免使用别名。要使用参数、多个命令等,您可以定义一个功能,访问参数与脚本中的方法相同:

foo() {
    do_this
    do_that "$1"
}

cat() { command cat "$@" && echo ""; }

(通常函数会覆盖可执行文件,因此command cat如果您想跳过该函数并直接运行可执行文件,则需要这样做。)

相关内容