协慌网

登录 贡献 社区

创建一个带参数的 Bash 别名?

我以前使用 CShell( ),它允许你创建一个带参数的别名。符号是这样的

alias junk="mv \\!* ~/.Trash"

在 Bash 中,这似乎不起作用。鉴于 Bash 有许多有用的功能,我会假设这个功能已经实现,但我想知道如何。

答案

Bash 别名不直接接受参数。您必须创建一个函数和别名。

alias不接受参数,但可以像调用别名一样调用函数。例如:

myfunction() {
    #do things with parameters like $1 such as
    mv "$1" "$1.bak"
    cp "$2" "$1"
}


myfunction old.conf new.conf #calls `myfunction`

顺便说一句, .bashrc和其他文件中定义的 Bash 函数可作为 shell 中的命令使用。因此,例如,您可以像这样调用早期的函数

$ myfunction original.conf my.conf

改进上面的答案,您可以像使用别名一样获得单行语法,这对于 shell 或. bashrc 文件中的 ad-hoc 定义更方便:

bash$ myfunction() { mv "$1" "$1.bak" && cp -i "$2" "$1"; }

bash$ myfunction original.conf my.conf

不要忘记关闭右括号前的分号。同样,对于实际问题:

csh% alias junk="mv \\!* ~/.Trash"

bash$ junk() { mv "$@" ~/.Trash/; }

要么:

bash$ junk() { for item in "$@" ; do echo "Trashing: $item" ; mv "$item" ~/.Trash/; done; }

这个问题简直被问到了错误。您没有创建带参数的别名,因为alias只为已存在的内容添加了第二个名称。 OP 想要的function是用于创建新功能的function命令。您不需要为函数设置别名,因为函数已有名称。

我想你想要这样的东西:

function trash() { mv "$@" ~/.Trash; }

而已!您可以使用参数 $ 1,$ 2,$ 3 等,或者只需将它们全部填入 $ @