做一个带参数的Bash别名?

我曾经使用CShell([tag:csh]),它让你做一个需要参数的别名。符号是这样的

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
评论(19)

完善上面的答案,你可以得到像别名那样的1行语法,这对shell或.bashrc文件中的临时定义更方便。

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; }
评论(8)

下面是我在~/.bashrc中的三个函数的例子,它们本质上是接受参数的别名。

#Utility required by all below functions.
#https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable#comment21953456_3232433
alias trim="sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'"

.


:
评论(6)