将别名作为函数参数linux bash传递

时间:2013-05-26 23:39:38

标签: linux bash bash-function

大家好我正在学习如何在linux中使用.bashrc文件,因为我的标题声明我想知道如何使函数将参数识别为别名

我有一个名为home的别名,定义为:alias home=$HOME

并将函数定义为

function go(){
cd $1
ls $1
}

但当我做go home时 我得到

bash: cd: home: No such file or directory ls: cannot access home: No such file or directory

当我想要它去做$ HOME

我将如何实施?

2 个答案:

答案 0 :(得分:5)

别名不是单词替换,而是新创建的小命令:

$ alias bla=ls
$ bla
file1
file2
file3
…

所以,它不能以你假设的方式使用。

您可能希望对此使用变量替换:

$ home=$HOME
$ function go() {
  cd "$(eval echo \$"$1")"
}
$ go home

如果您想使用别名,尽管这是滥用行为,请尝试以下操作:

$ alias home=$HOME
$ function go() {
  cd "$(type "$1" | sed -e 's/.*is aliased to .//' -e 's/.$//')"
}
$ go home

答案 1 :(得分:3)

  

我想知道如何使函数将参数识别为别名

要按字面意思回答您的问题,您可以在函数内使用type -t来确定其参数是否为别名。但那可能不是你想要的。

AFAIK,你真正想要的是不可能的。来自Bash manual(强调我的):

  

别名允许字符串替换单词,当它用作简单命令的第一个单词时。

你最接近的是:

go `home`