Bash 中带有变量的别名

我想在 bash中创建一个这样的别名:

alias tail_ls="ls -l $1 | tail"

因此,如果有人打字:

tail_ls /etc/

它将只显示目录中的最后10个文件。

但是 $1似乎对我不起作用。有没有什么办法我可以在 bash 中引入变量。

118267 次浏览

tail_ls() { ls -l "$1" | tail; }

我会为它创建一个函数,而不是别名,然后像这样导出它:

function tail_ls { ls -l "$1" | tail; }


export -f tail_ls

注意,-f切换到 export: 它告诉它您正在导出一个函数。把这个放进你的 .bashrc,你就可以开始了。

@ maxim-sloyko 的解决方案不起作用,但如果:

  1. 在 ~/. bashrc 中添加:

    sendpic () { scp "$@" mina@foo.bar.ca:/www/misc/Pictures/; }
    
  2. Save the file and reload

    $ source ~/.bashrc
    
  3. And execute:

    $ sendpic filename.jpg
    

original source: http://www.linuxhowtos.org/Tips%20and%20Tricks/command_aliases.htm

如果您使用 Fish shell (来自 http://fishshell.com)而不是 bash,那么它们编写函数的方式稍有不同。

你会想要把这样的东西加到你的 ~/.config/fish/config.fish中,它相当于你的 ~/.bashrc

function tail_ls
ls -l $1 | tail
end
alias tail_ls='_tail_ls() { ls -l "$1" | tail ;}; _tail_ls'

您可以使用 set定义 $1,然后按预期使用别名:

$ alias tail_ls='ls -l "$1" | tail'
$ set mydir
$ tail_ls