如何向`Bash` 函数添加默认参数?

问题描述

大多数时候,当我在某个目录中并从命令行运行某个作业时,我喜欢这样做:

ls -ltr | tail -3

确认我期望的文件确实存在。

为了避免输入太频繁,我在 ~/.bach_profile添加

alias ltr="ls -ltr | tail -3"

Bash doesn't accept 参数,但我们可以写

ltr() {
    ls -ltr "${1}" | tail -3
}

在(说)下载一些东西之后,这使得输入 ltr ~/Downloads 成为可能。

但我不能再只输入 ltr。我现在必须输入 ltr .

如何向 Bash 函数添加认参数?

(我在 macOS 终端中,以防万一。)

解决方法

您可以像这样使用默认参数值:

ltr() {
   ls -ltr "${1:-.}" | tail -3
}

如果缺少 .,它将使用 ls -ltr 作为 $1 的参数。

有了这个,你可以像这样使用:

ltr ~/Documents
ltr ~/Downloads
ltr

Please read this about parsing the output of ls

,

这并不完全符合您的要求,但在这种情况下,最好使用它:

ltr() {
    ls -ltr "$@" | tail -3
}

"$@" 扩展为传递给 ltr 的所有参数,因此您可以传递多个参数...或根本不传递,并且您传递的任何参数都会传递给 ls -ltr .