4

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

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

和一个函数 go 定义为

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

我将如何实施呢?

4

2 回答 2

8

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

$ 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
于 2013-05-26T23:48:42.887 回答
4

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

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

AFAIK,你真正想要的是不可能的。从Bash 手册(强调我的):

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

你能得到的最接近的是:

go `home`
于 2013-05-26T23:43:10.947 回答